x 轴在 SAS 中应该与时间成比例

问题描述

我需要呈现一个线性 x 轴,这意味着时间点之间的距离需要与时间成比例。我已经完成了以下代码

/*Produce mean +/- SD plot with line graph*/
proc sgplot data=adpc;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose';
yaxis label='Mean +/- SD';
run;

这是输出

enter image description here

x 轴具有变量小时,其值为 0、1、2、3、4、6、8、24(小时)。我认为与时间成比例,意味着它应该在观察之间具有相等的范围。例如,x 轴应该是 0,2,4,6,8,10,12,14,16,18,20,22,24(不确定时间比例是什么意思)。 我应该添加什么?

解决方法

这里的问题是 if (!empty($_POST)) { $wpdb->query('START TRANSACTION'); //All this fields are repeatable inputs,except client_vat that can only be the 1st record. I think it's missing a foreach $default = array( 'client_name' => $_POST['client_name'],'client_birth' => $_POST['client_birth'],'client_sns' => $_POST['client_sns'],'client_vat' => $_POST['client_vat'],'client_city' => $_POST['client_city'],'client_email' => $_POST['client_email'],'client_phone' => $_POST['client_phone'] ); $item = shortcode_atts( $default,$_REQUEST ); $addClients = $wpdb->insert( 'wp7s_g_clients',$item ); $default = array( 'test_client' => ???,//ID of previous client that have client_vat filled [0] ); $item = shortcode_atts( $default,$_REQUEST ); $addTests = $wpdb->insert( 'wp7s_g_tests',$item ); $collectDate = date('Y-m-d H:i:s',strtotime($_POST['booking_collect_date'])); $default = array( 'booking_status' => 1,'booking_partner' => $_POST['booking_partner'],//ID of the partner,if not empty 'booking_client' => ???,//If partner don't exist -> ID of client that have client_vat filled 'booking_type' => $_POST['booking_type'],'booking_clients' => ???,//Array of all IDs previously added in wp7s_g_clients table 'booking_city' => $_POST['booking_city'],'booking_address' => $_POST['booking_address'],'booking_collect_date' => $collectDate,'booking_payment' => $_POST['booking_payment'],'booking_amount' => $_POST['booking_amount'],'booking_obs' => nl2br($_POST['booking_obs']),); $item = shortcode_atts( $default,$_REQUEST ); $addBookings = $wpdb->insert( 'wp7s_g_bookings',$item ); if($addClients && $addTests && $addBookings) { $wpdb->query('COMMIT'); $msg = "Success"; wp_redirect( esc_url( get_page_link( 6 ) ) ); exit; } else { $wpdb->query('ROLLBACK'); $msg = "Error"; } } 是一个分类图 - 像条形图,但带有线条。所以X轴是一个分类轴!使分类轴成比例的唯一方法是不跳过任何类别。

最好使用 VLINE 或类似的,它使用数字轴。

这是一个使用合成数据(请在将来提供!)和一个 HIGHLOW 来添加条形的示例。

series

enter image description here

,

您是否尝试过在 XAXIS 语句中明确指定值?

您需要将它们全部列出,但这应该会给您一个想法:

xaxis label='Hours post dose' values = ("0" "2" "4" "6" "8" "10" "12" ... "24");

编辑:这个使用来自@Joe 的假数据的更简化版本效果很好。

data adpc;
call streaminit(7);
do dose = 1,5,10,100;
    do _i = 1 to 100;
        hours = rand('Integer',1,8);
        if hours in (5,7) then hours=24;
        value = rand('Uniform')*100*log(dose+1);
        output;
    end;
end;
run;

proc sgplot data=adpc;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose' values = (0 to 24 by 2);
yaxis label='Mean +/- SD';
run;

,

将选项 type=time 添加到您的 XAXIS 语句中。您还需要使用 values= 选项来明确说明要勾选的剂量值。

示例:

proc sgplot data=have;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose' 
   type=time values=(0 to 4,6,8,24)  /* added to xaxis statement */
;
yaxis label='Mean +/- SD';
run;

完整示例:

data have;
  call streaminit(2021);
  do patid = 1 to 500;
    dose = int( (patid-1) / (500/4) );
    do hours = 0 to 4,24;
      select (dose);
        when (0) value = hours/24 * 25;
        when (1) value = hours/24 * 45;
        when (2) value = ifn (hours<6,hours/6 * 100,100 - hours/24 * 25);
        when (3) value = ifn (hours<6,hours/6 * 250,250);
        otherwise;
      end;

      base = value;
      jitter = rand('uniform') * hours;
      value = min(jitter * value,250);

      output;
    end;
  end;
run;

ods html file='vline.html';

proc sgplot data=have;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose' type=time values=(0 to 4,24);
yaxis label='Mean +/- SD';
run;

ods html close;

生产

enter image description here