2

我正在比较患者不同治疗方法的血浆浓度随时间的变化。我们将每种治疗应用于不同的受试者,并且对于每种治疗,我们想要一个图表,其中黑色为每个受试者的演变,以及红色的平均值。

它应该看起来像这样 在此处输入图像描述

但它确实看起来像这样

在此处输入图像描述

我的数据有变量

  • trtan 和 trta 用于治疗编号和名称
  • 接受该治疗的患者
  • 时间点的 ATPT
  • 个人浓度的 AVAL
  • 平均浓度的平均值

我正在使用 SGPLOT 来生成这个线图。y 轴有浓度,而 x 轴有时间点,我在传递给 Proc SGPLOT 之前按治疗、主题和时间点对数据进行排序。

个人主题的线条很好,问题在于平均线图,由于数据集按主题排序,我也得到了多个主题的平均图。我的要求是有多个单独的图和一个叠加的平均图。谁能告诉我如何解决这个问题。

我正在使用下面的代码。我该如何修复它?

proc sort data = pc2;
    by trtan trta subjid atptn atpt;
run;


proc sgplot data = pc2 dattrmap = anno pad = (bottom = 20%) NOAUTOLEGEND ;

    by trtan trta;

    series x = atptn y = aval/ group = trta  
        lineattrs = (color = black thickness = 1 pattern = solid );

    series x = atptn y = mean/ group = trta attrid = trtcolor  
        lineattrs = (thickness = 2 pattern = solid );


    xaxis label= "Actual Time (h)"
          labelattrs = (size = 10)
          values = (0 12 24 36 48 72 96 120 168)
          valueattrs = (size = 10)
          grid;

    yaxis label= "Plasma Concentration (ng/mL)"
          labelattrs = (size = 10)
          valueattrs = (size = 10)
          grid;

run;
4

2 回答 2

0

这不仅仅是平均值的问题。忽略平均值,min=-20按照你的yaxis规范,你会看到同样的问题。

或者运行此代码

data pc2;
do subj = 1 to 3;
    do time = 1 to 25;
        value = 2*sin(time/3) + rand('Normal');
        output;
    end;
end;
run;
proc sgplot data=pc2;
    series x=time y=value;
run;

你会得到

毫无意义的问题

解决方案是为每个主题绘制一个图,因此首先按时间对数据进行排序并将其转置subj_1为每个主题都有一个变量等。

proc sort data=pc2 out=SORTED;
    by time subj;
run;
proc transpose data=TEST out=TRANS prefix=subj_;
    by time;
    id subj;
run;

我把它作为练习留给你添加mean到这个数据集。

然后运行每个主题sgplot的声明。series为了构建这些语句,我们询问数据集中的元数据WORK.TRANS

proc sql;
    select distinct 'series x=time y='|| name ||'/lineattrs = (color=black)'
    into :series_statements separated by ';'
    from sasHelp.vColumn
    where libname eq 'WORK' and memName eq 'TRANS' 
      and (name like 'subj%' or name = mean;
quit;
proc sgplot data=TRANS;
    &series_statements;
run;

对于我的示例,没有平均值的结果如下所示:

在此处输入图像描述

当然,您将不得不进行一些图形微调。

于 2020-05-15T15:22:01.967 回答
0

我们可以简单地通过 ATPT 取平均值,而不是通过 ATPT 将平均记录合并到 PK 数据中来实现它,您需要附加记录,然后您可以运行您的代码,它将为您提供您期望的结果,如果它不起作用,请告诉我,它似乎对我有用。

于 2020-10-30T10:12:19.603 回答