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

使用SAS Proc Model按分组导出参数估计值失败的问题求助

解决PROC MODEL中BY GROUP后参数无法全部导出的问题

问题原因

PROC MODEL的outparms=选项默认会覆盖输出数据集,因此当使用BY GROUP时,每个组的参数会依次覆盖前一组的结果,最终只保留最后一组的参数。

解决方案:使用ODS Output捕获所有组参数

最可靠的方法是利用SAS的ODS输出功能,直接捕获每个BY组的参数估计结果,自动追加到同一个数据集中,且会保留group变量用于区分不同组。

修改后的完整代码:

data work.have;
    input group y1 x1 x2;
    datalines;
    1 10 0.5 25
    1 12 0.7 30
    1 9 0.6 28
    2 8 0.4 35
    2 11 0.5 40
    2 10 0.45 37
;
run;

proc sort data=work.have;
    by group;
run;

/* 开启ODS输出,将参数估计结果导出到指定数据集 */
ods output ParameterEstimates=work.all_parms;
proc model data=work.have noprint;
    by group;
    parms c1=1 c2=1 c3=1;
    y1 = exp(c1 + c2*x1 + c3/x2); 
    fit y1;
run;
quit;
ods output close; /* 关闭ODS输出,避免后续操作干扰 */

/* 查看最终合并后的参数数据集 */
proc print data=work.all_parms;
run;

结果说明

生成的work.all_parms数据集会包含所有组的参数估计值,同时自动携带group变量,以及参数的标准误、t值、p值等统计信息,无需额外处理即可区分不同组的参数。

备选方案:使用APPEND手动合并参数数据集

如果无法使用ODS输出,也可以通过临时数据集+PROC APPEND的方式手动合并,但步骤相对繁琐:

/* 先创建空的参数数据集模板 */
data work.all_parms;
    length Parameter $32 Estimate StdErr tValue Probt 8;
    stop;
run;

proc model data=work.have noprint outparms=work.temp_parm;
    by group;
    parms c1=1 c2=1 c3=1;
    y1 = exp(c1 + c2*x1 + c3/x2); 
    fit y1;
    /* 每个BY组结束后,将临时参数追加到最终数据集 */
    append base=work.all_parms data=work.temp_parm;
run;
quit;

/* 关联原数据集补充group变量 */
proc sql;
    create table work.all_parms_final as
    select distinct h.group, p.*
    from work.have h
    cross join work.all_parms p
    order by h.group, p.Parameter;
quit;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:37:48