作者wlsherica (CrevetteStudio)
看板Statistics
标题[程式] SAS 重复1000次交叉验证
时间Thu Sep 30 11:01:00 2010
[软体程式类别]:SAS
[程式问题]:macro
[软体熟悉度]:高(1年以上)
[问题叙述]:
手上有一组原始资料,想要作10-fold cross-validation(交叉验证,CV)
计算线性回归後得到一个R-square之後,将这些过程重复1000次,
以得到1000个R-square,再去计算平均值。
目前先写了内部的程式(CV+PROC SURVEYSELECT+PROC REG)
现在想要重覆作1000次,因为会有1000个R-square,想将之存在同一个档案
应该是要用macro写...
初步跑一次发现output与log file跑出很多档,如果另存到其他地方
是否会提升效率呢?
[程式范例]:
%macro boot ;
%do x = 1 %to 1000;
/*对raw data(档名boottest)进行抽样,出来的档为xv*/
%let k=10;
%let rate=%sysevalf((&k-1)/&k);
proc surveyselect data=boottest out=
&x. seed=0
samprate=&rate outall rep=10;
run;
/*开始作10-fold CV*/
data xv
&x.;
set xv
&x.;
if selected then new_y=y;
run;
/*对proc reg内去取得Y的预测值(yhat)*/
proc reg data=xv
&x. noprint;
model new_y=x;
by replicate;
output out=outb
&x.(where=(new_y=.)) p=yhat;
run;
/*计算y与yhat的R-square,即这段程式的目标*/
ods output fitstatistics=tt
&x.(where=(label2="R-Square"));
proc reg data=outb
&x. ;
model yhat=y;
run;
%end;
%mend boot;
%boot;
-----------------------------------------------------------------------------
macro初学者,请先进们不吝赐教指点
非常感谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.25.110.97
※ 编辑: wlsherica 来自: 163.25.110.97 (09/30 11:32)
※ 编辑: wlsherica 来自: 163.25.110.97 (09/30 11:48)
1F:推 imaltar:把noprint拿掉试试看 09/30 12:14
2F:推 imaltar:我忘记看到你已经说过拿掉NOPRINT就OK那一行 09/30 12:21
3F:→ wlsherica:另外想请教因为这样output跟log file页数超多 09/30 12:28
4F:→ wlsherica:是不是可以将他们另存到其他地方,会比较快吗??? 09/30 12:28
※ 编辑: wlsherica 来自: 163.25.110.97 (09/30 12:35)
5F:→ kingbee:既然是收析度高的话 hint: ODS 09/30 15:01
6F:→ wlsherica:谢谢提示!! 09/30 15:22
7F:→ kingbee:主程式>Tools>Options>system 选单找找看或许比较快 09/30 16:25
8F:→ kingbee:log视窗是用来看 若太多内容 关掉会比较快 09/30 16:29
9F:→ kingbee:output的部份 提示 ods trace 及 ods output 的应用 09/30 16:30
10F:→ kingbee:或是ods select 09/30 16:30
11F:→ wlsherica:(笔记) 来研究, 谢谢K大与I大 09/30 20:29
12F:推 maumausam:感谢各位前辈~我也要来学 10/05 01:06