全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1870 2
2013-11-28
各位前辈好:
       小辈用蒙特卡罗设计重复模拟回归分析1000次,要把每次模拟的参数为零的个数累加起来,最后1000次结束后算参数为零的平均个数,现不知道怎样把程序中的corr和incorr累加起来。向各位求助呀。
%MACRO A;

%do loop=1 %to 1000;
data X1;/*生成6个独立的服从标准正态分布的随机数*/

do i=1 to 200;
X1=0+1*rannor(0);
output;
end;
run;

data X2;

do i=1 to 200;
X2=0+1*rannor(0);
output;
end;
run;

data X3;

do i=1 to 200;
X3=0+1*rannor(0);
output;
end;
run;

data X4;

do i=1 to 200;
X4=0+1*rannor(0);
output;
end;
run;

data X5;

do i=1 to 200;
X5=0+1*rannor(0);
output;
end;
run;

data X6;

do i=1 to 200;
X6=0+1*rannor(0);
output;
end;
run;
data X; /*将六个变量生成的随机数合并在一起*/
merge X1 X2 X3 X4 X5 X6;
by i;
run;

data yifu;
do i=1 to 200;
yifu=0+4*rannor(0);
output;
end;
run;
data X0;/*将X中的X1-X6选出来*/
set X;
keep X1 X2 X3 X4 X5 X6;
run;
data yifu0;/*将yifu选出来,以便后面生成矩阵*/
set yifu;
keep yifu;
run;


proc iml;/*将X0数据集变成矩阵x */
    use X0;
    read all var _num_ into XX;
   print XX;
    use yifu0;/*将yifu数据集变成矩阵yifusilo */
    read all var _num_ into yifusilo;
   print yifusilo;

   reset print;/*矩阵的生成和运算命令*/
beta={1, 0.8, 0.6, 0, 0, 0};
Y=XX*beta+yifusilo;/*生成Y*/
print Y;
create YY from Y;/*将矩阵Y转换成数据集YY*/
append from Y;
quit;

data bijiao(rename=(COL1=Y));/*修改变量名*/
merge X0 YY;
run;

proc reg data=bijiao outest=sp1 ;/*step的程序*/
model Y=X1-X6/selection=stepwise sle=0.10 sls=0.10;
run;
quit;
/*data _null_;
set sp1;
incorr=0;
do i=5 to 6;
if xi>0 or xi<0 then do; incorr=incorr+1;
end;
end;
put incorr;
run;*/

data _null_;/*计算stepwise结果中correct和incorrect*/
set sp1;
corr=0;
incorr=0;
do i=1 to 3;
if Xi<0 or Xi>0 then do; incorr=incorr+1;
end;
end;
do i=4 to 6;
if Xi<0 or Xi>0  then do;corr=corr+1;
end;
end;
put corr incorr;
run;
%END;
%MEND A;
%A;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-11-29 23:40:59
The programs have too many redundant steps and macro is not necessary.

Here is a simple one to reproduce what you need.


data tmp;
array x(6);
do loop=1 to 10;
do i=1 to 200;
  do j=1 to dim(x);
    X(j)=0+1*rannor(0);
  end;
  yifu=0+4*rannor(0);
  Y=x1*1 + x2*0.8 +x3*0.6 + x4*0+ x5*0+ x6*0 + yifu;
  output;
end;
end;
keep x:  y yifu loop;
run;

proc reg data=tmp outest=sp1 noprint;
by loop;
model Y=X1-X6 yifu/selection=stepwise sle=0.10 sls=0.10;
run;
quit;

proc print data=sp1;
run;

The simulation is invalid according the programs you provide. I guess what you need is as following,


data tmp;
array x(6);
do loop=1 to 10;
do i=1 to 200;
  do j=1 to dim(x);
    X(j)=0+1*rannor(0);
  end;
  yifu=0+4*rannor(0);
  Y=x1*1 + x2*0.8 +x3*0.6 + x4*0+ x5*0+ x6*0 + yifu + rannor(0);
  output;
end;
end;
keep x:  y yifu loop;
run;

proc reg data=tmp outest=sp1 noprint;
by loop;
model Y=X1-X6 yifu/selection=stepwise sle=0.10 sls=0.10;
run;
quit;

proc print data=sp1;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-12-30 14:51:11
bobguy 发表于 2013-11-29 23:40
The programs have too many redundant steps and macro is not necessary.

Here is a simple one to re ...
Thank you very much
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群