You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SAS中循环执行MMRM模型并获取LSMEAN结果

SAS宏循环实现分组MMRM结果合并

因为SAS中array是数据步内用于处理数据集变量的工具,而你需要的是跨数据集、跨PROC步骤的循环逻辑,宏循环才是正确的选择。以下是实现你需求的完整代码:

/* 1. 创建空的结果数据集(提前定义变量,避免追加时变量不一致)*/
data result;
    length group_var $20 group_level 8 treatment $20 visit $20 lsmean 8 ci $50;
    /* 变量定义需匹配%format_result宏的输出字段,可根据实际调整 */
    stop;
run;

/* 2. 定义宏,封装MMRM运行、结果格式化与追加逻辑 */
%macro run_mmrm_by_group(group_vars);
    /* 拆分传入的分组变量列表 */
    %let i=1;
    %let current_var=%scan(&group_vars.,&i.);
    %do %while(&current_var. ne);
        /* 循环当前分组变量的两个水平:1和2 */
        %do level=1 %to 2;
            /* 运行MMRM模型 */
            proc mixed data = have;
                where &current_var. = &level.;
                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; /* 原代码中treat是缩写,建议写全避免识别错误 */
                ods output lsmeans = lsmeans diffs=diffs;
            run;

            /* 调用格式化宏,生成当前分组水平的结果数据集 */
            %format_result(lsmeans,diffs,&current_var._&level.); /* 用带水平的命名避免数据集覆盖 */

            /* 将结果追加到总数据集result */
            proc append base=result data=&current_var._&level. force;
            run;

            /* 删除临时数据集,释放空间 */
            proc datasets lib=work nolist;
                delete lsmeans diffs &current_var._&level.;
            run;
        %end;
        %let i=%eval(&i.+1);
        %let current_var=%scan(&group_vars.,&i.);
    %end;
%mend run_mmrm_by_group;

/* 3. 调用宏,传入需要循环的分组变量 */
%run_mmrm_by_group(age_gr gender_gr bmi_gr);

关键说明:

  • 宏循环的适配性:SAS宏可以跨PROC/数据步执行循环,完美适配你多次调用PROC MIXED并合并结果的需求,这是array无法实现的。
  • 临时数据集命名:用&current_var._&level.(如age_gr_1、gender_gr_2)作为临时结果集名称,避免不同循环迭代间的数据集覆盖问题。
  • PROC APPEND效率:相比数据步SET语句,PROC APPEND是更高效的追加方式,force参数可自动处理变量类型/长度不一致的情况(建议提前统一变量定义减少隐患)。
  • 分组标识补充:建议在%format_result宏中添加group_var="&current_var."、group_level=&level.这类变量,让最终的result数据集能清晰区分不同分组的结果。

内容的提问来源于stack exchange,提问作者Robin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:53:16