用于基线值平均变化的 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_visitnum
和 base_visitnumber
之间的不匹配。
我有以下数据:
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_visitnum
和 base_visitnumber
之间的不匹配。