我是 R 用户,并且是 SAS 新手。我尝试编写一个 do 循环来运行 MMRM 模型并附加结果。到目前为止,我已经有了执行循环的总体想法,但仍然不知道如何在 SAS 中实现它。
我有一个数据集
have
,其中包含以下变量:
subjid
、treatment
、baseline
、visit
、age_gr
、gender_gr
、bmi_gr
我想要运行循环的步骤如下:
第一步:设置
name=age_gr
,生成一个空数据,名为result
;
第2步:运行MMRM模型
where &name=1
如下:
proc mixed data = have;
where &name=1;
class subjid treatment visit;
model chg = baseline treatment visit treatment*visit/ ddfm = KR;
repeated visit/ subject = subjid type = UN;
lsmeans treat*visit/ cl alpha = 0.05 diff e;
ods output lsmeans = lsmeans diffs=diffs;
run;
第 3 步:使用名为
%format_result(lsmeans,diffs,&name)
的宏保存 lsmeans 和 95% CI 的结果;我已经完成了宏,所以只需要知道结果保存在一个名为 &name
的文件中,即它应该在第一个循环中称为 age_gr
;
第4步:将结果
&name
附加到数据result
,如下所示:
data result;
set result &name;
run;
第5步:运行MMRM模型
where &name=2
如下:
proc mixed data = have;
where &name=2;
class subjid treatment visit;
model chg = baseline treatment visit treatment*visit/ ddfm = KR;
repeated visit/ subject = subjid type = UN;
lsmeans treat*visit/ cl alpha = 0.05 diff e;
ods output lsmeans = lsmeans diffs=diffs;
run;
第6步: 与步骤 3 相同,使用名为
%format_result(lsmeans,diffs,&name)
的宏保存 lsmeans 和 95% CI 的结果,并将结果保存在名为 &name
; 的文件中
第7步: 与步骤 4 相同:将结果
&name
附加到数据 result
中,如下所示:
data result;
set result &name;
run;
步骤8:通过设置
name=gender_gr
重复步骤1-7;
第9步:通过设置
name=bmi_gr
重复步骤1-7,最终得到result
文件;
我正在考虑使用 SAS 中的
array
之类的东西来执行循环,但失败了:
data want;
set have;
array vars age_gr--bmi_gr;
do i=1 to dim(vars);
name=vars(i);
... have no idea how to continue
如果有人可以提供帮助,我们将不胜感激!
我认为想要为 _GR 变量的每个级别运行 PROC MIXED 步骤 1-7 可以使用与此类似的宏来实现。
%macro main(name);
proc sort data=have;
by &name;
run;
proc mixed data=have;
by &name;
class subjid treatment visit;
model chg = baseline treatment visit treatment*visit/ ddfm = KR;
repeated visit/ subject = subjid type = UN;
lsmeans treatment*visit/ cl alpha = 0.05 diff e;
ods output lsmeans = lsmeans diffs=diffs;
run;
%format_result(lsmeans,diffs,&name);
%mend main;