【问题标题】:SAS macro for mean change in baseline values用于基线值平均变化的 SAS 宏
【发布时间】:2020-04-04 00:17:21
【问题描述】:

我有以下数据:

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

我想创建下表,其中汇总了所有患者在每次就诊时的变量“LABVALUE”(表 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;

这会生成下表:

   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

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

【问题讨论】:

    标签: sas summary sas-macro


    【解决方案1】:

    这应该可以让你大部分时间到达那里:

    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 之间的不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多