如何在sas中进行mmrm模型并循环得到lsmean结果?

问题描述 投票:0回答:1

我是 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

如果有人可以提供帮助,我们将不胜感激!

sas do-loops
1个回答
0
投票

我认为想要为 _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;
© www.soinside.com 2019 - 2024. All rights reserved.