用于基线值平均变化的 SAS 宏

SAS macro for mean change in baseline values

我有以下数据:

Patient     Visit         VisitNumber    LAB        LABVALUE
001         BASELINE      1              LAB1       10
001         DAY 100       2              LAB1       15
001         DAY 200       3              LAB1       12
002         BASELINE      1              LAB1       11
002         DAY 100       2              LAB1       14
002         DAY 200       3              LAB1       12
001         BASELINE      1              LAB2       40
001         DAY 100       2              LAB2       45
001         DAY 200       3              LAB2       42
002         BASELINE      1              LAB2       41
002         DAY 100       2              LAB2       44
002         DAY 200       3              LAB2       42

我想创建以下 table,它总结了每次就诊时所有患者的变量 'LABVALUE' (Table 2):

Visit       VisitNumber       LAB         MEAN            BASELINEMEAN        CHANGEBASEMEAN
BASELINE    1                 LAB1        10.5            10.5                .
DAY 100     2                 LAB1        14.5            10.5                4
DAY 200     3                 LAB1        12              10.5                1.5
BASELINE    1                 LAB2        40.5            40.5                .
DAY 100     2                 LAB2        44.5            40.5                4
DAY 200     3                 LAB2        42              40.5                1.5

我有以下代码生成每次患者就诊时基线值的变化:

proc sort data=have;
  by patient lab visitnumber;
run;

data for_report;

  set have;
  by patient lab;

  retain base_visitnum base_labvalue;

  if first.patient then do;
    base_visitnum = .;
    base_labvalue = .;
  end;

  if first.lab and visit='BASELINE' then do;
    base_visitnumber = visitnumber;
    base_labvalue = labvalue;
  end;

  if not first.lab then do;
    delta_labvalue = labvalue - base_labvalue;
  end;

run;

这会生成以下 table:

   LAB      Visit     VisitNumber       LABVALUE        BASE_VISITNUM      BASE_LABVALUE   DELTA_LABVALUE
   LAB1     BASELINE  1                 10              1                  10              .
   LAB1     DAY 100   2                 15              1                  10              5
   LAB1     DAY 200   3                 12              1                  10              2 
   LAB1     BASELINE  1                 11              1                  11              .
   LAB1     DAY 100   2                 14              1                  11              3
   LAB1     DAY 200   3                 12              1                  11              1
   LAB2     BASELINE  1                 40              1                  10              .
   LAB2     DAY 100   2                 45              1                  10              5
   LAB2     DAY 200   3                 42              1                  10              2 
   LAB2     BASELINE  1                 41              1                  11              .
   LAB2     DAY 100   2                 44              1                  11              3
   LAB2     DAY 200   3                 42              1                  11              1

任何关于如何生成 Table 2 的见解都将不胜感激。

这应该可以帮助您完成大部分工作:

proc sql noprint;
  create table table2 as
    select visit,
           visitnumber,
           lab,
           mean(value) as mean,
           mean(base_labvalue) as baselinemean
    from for_report
    group by visit, visitnumber, lab
  ;
quit;

我留下了一些细节供您完成:-)

此外,请注意示例代码中 base_visitnumbase_visitnumber 之间的不匹配。