1

我需要呈现一个线性 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;

这是输出: 在此处输入图像描述 x 轴具有变量 hours,其取值为 0、1、2、3、4、6、8、24(小时)。我认为与时间成比例,意味着它应该在观察之间具有相等的范围。例如,x 轴应该是 0,2,4,6,8,10,12,14,16,18,20,22,24(不确定时间比例是什么意思)。我应该补充什么?

4

3 回答 3

2

这里的问题是这VLINE是一个分类图 - 像条形图但有线条。所以X轴是一个分类轴!使分类轴成比例的唯一方法是不跳过任何类别。

更好的是使用series或类似的,它使用数字轴。

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

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 means data=adpc nway;
  class dose hours;
  var value;
  output out=adpc_mean mean(value)=value stderr(value)=std;
run;

data adpc_calc;
  set adpc_mean;
  std_high = value+std;
  std_low  = value-std;
run;


proc sgplot data=adpc_calc;
  series x=hours y=value/group=dose;
  highlow x=hours high=std_high low=std_low/ lowcap=serif highcap=serif;
  xaxis values=(1,2,3,4,6,8,24);
run;

在此处输入图像描述

于 2021-07-06T14:41:47.340 回答
1

您是否尝试过明确指定 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;

于 2021-07-06T20:35:44.730 回答
0

将选项添加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, 6, 8, 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,6,8,24);
yaxis label='Mean +/- SD';
run;

ods html close;

生产

在此处输入图像描述

于 2021-07-08T10:40:03.277 回答