我正在寻找与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)
答案 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;
语句创建为字符串,并将它们存储在宏变量中。这种方法有其缺点:
estimate
和call symput
循环)并从do
循环调用这些行。编辑:您可能想要探索的另一个选项。
在最近的版本中,%do
和proc mixed
支持code
statement,can be used输出获取新观察所需的SAS数据步骤代码。如有必要,您可以使用生成的代码作为基础,并根据您希望执行的分析进行修改。
proc plm
骨架:
call symput
答案 1 :(得分:0)
"宏变量的长度有限(65534个字符)。如果您的变量有超过此值的风险,则应将其拆分(使用call symput和do循环)并从%do循环中调用行。"
另一种选择是将您的估算列表设置为单独的代码文件并使用%include这对于大量变量列表或重复不需要参数的代码块也很有用。