估计PROC MIXED中的多个输入

时间:2015-03-07 22:08:40

标签: sas proc mixed-mode

我正在寻找与Proc得分相似的东西(来自proc reg的结果)来估算数据集。

到目前为止,我有类似的事情。

PROC MIXED data = maindata noclprint covtest;
Class ID;
Weight w1;
Model TIME = Age Age*Age / Solution cl residual;
Random Intercept Age Age*Age / sub=ID;
Estimate 'ID1' Intercept 1 Age 10 Age*Age 100 | Intercept 1 Age 10 Age*Age 100/ cl Subject 1;
Estimate 'ID2' Intercept 1 Age 12 Age*Age 144 | Intercept 1 Age 12 Age*Age 144/ cl Subject 0 1;
Estimate 'ID3' Intercept 1 Age 11 Age*Age 121 | Intercept 1 Age 11 Age*Age 121/ cl Subject 0 0 1;
Estimate 'ID4' Intercept 1 Age 15 Age*Age 225 | Intercept 1 Age 15 Age*Age 225/ cl Subject 0 0 0 1;
(. . . You get the point)
run; quit;

这是我的估算数据集:

ID  Age AgeSq
1   10   100
2   12   144
3   11   121
4   15   225
...
50  9    81

我的问题是,除了这些估算陈述中的50之外,还有其他方式更有效率。

我试过PROC PLM。 PROC PLM(SCORE(PREDICTED))的问题在于它不会将随机效应带入帐户。(http://support.sas.com/documentation/cdl/en/statug/63347/HTML/default/viewer.htm#statug_plm_a0000000126.htm

2 个答案:

答案 0 :(得分:1)

编辑:我没有正确阅读有关plm的问题的结尾。我很抱歉,请看下面的休息时间。

这不是我已经完成的事情,但我相信你可以使用proc plm获得你想要的东西,它可以使用由proc mixed生成的模型对数据集(以及其他内容)进行评分,{{1 }} 和别的。

基本方法是使用store statement

存储模型的二进制表示
proc glm

然后使用proc mixed; ... store sasuser.myModel; run; 处理您的新数据:

proc plm

user guide应该有助于finer points


Rick Wicklin here提供了更多关于类似问题的讨论。


作为一种快速而又脏的替代方法,您可以使用宏变量来编写估算proc plm source = sasuser.mixed; ... score data = inData out = want; run;

statements

基本上,您在sql查询中将所有proc sql; select "estimate 'ID" || put(ID, best.) || "' intercept 1 Age " || put(Age, best.) || " Age*Age " || put(Age**2, best.) || " | intercept 1 Age " || put(Age, best.) || " Age*Age " || put(Age**2, best.) || " / cl subject" || repeat(" 0", (ID - 1)) || "1;" into :estList separated by " " from inEst order by ID; quit; proc mixed data = maindata noclprint covtest; class id; weight w1; model time = age age*age / solution cl residual; random intercept age age*age / sub = id; &estList.; ods output estimates = want; quit; 语句创建为字符串,并将它们存储在宏变量中。这种方法有其缺点:

  • 代码变得混淆;它并不明显是做什么的。我对这样的代码进行了大量评论,以便让任何可怜的维护者明白为什么你已经完成了这个以及它做了什么。
  • 宏变量的长度有限(65534个字符)。如果您的变量存在超出此范围的风险,则应将其拆分(使用estimatecall symput循环)并从do循环调用这些行。

编辑:您可能想要探索的另一个选项。

在最近的版本中,%doproc mixed支持code statementcan be used输出获取新观察所需的SAS数据步骤代码。如有必要,您可以使用生成的代码作为基础,并根据您希望执行的分析进行修改。


proc plm骨架:

call symput

答案 1 :(得分:0)

"宏变量的长度有限(65534个字符)。如果您的变量有超过此值的风险,则应将其拆分(使用call symput和do循环)并从%do循环中调用行。"

另一种选择是将您的估算列表设置为单独的代码文件并使用%include这对于大量变量列表或重复不需要参数的代码块也很有用。