搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  一个蒙特卡洛模拟的程序.zip
资料下载链接地址: https://bbs.pinggu.org/a-1658493.html
本附件包括:
  • 一个蒙特卡洛模拟的程序.sas
附件大小:
%macro rmnc(data=,out=,seed=0);
proc contents data=&data(drop=_type_ _name_) out=_data_(keep=name) noprint;
run;
data _data_;
set _last_ end=end;
retain n 0;
n=n+1;
v=compress('V'||COMPRESS(PUT(N,6.0)));
call symput(V,NAME);
if end then call symput('NV',LEFT(PUT(N,6.)));
run;
%let vnames=&V1;
%do i=2 %to &NV;
%let vnames=&VNAMES&&V&I;
%END;

PROC FACTOR DATA=&DATA NFACT=&NV NOPRINT
OUTSTAT=_pttrn_(where=(_TYPE_ IN('MEAN','STD','N','PATTERN')));
RUN;

%let nv2=%EVAL(&NV*&NV);
DATA &OUT(KEEP=&VNAMES);
SET _pttrn_(keep=&VNAMES _TYPE_
rename=(%do i=1 %to &NV;&&V&I=V&I %END;)) END=lastfact;
retain;
array fpattern(&NV,&NV) F1-F&NV2;/*factor pattern*/
array vmean(&NV) M1-M&NV;/*mean*/
array vstd(&NV) S1-S&NV;/*standard deviation*/
array v(&NV) V1-V&NV;/*random variables to be generated*/
array vtemp(&NV) VT1-VT&NV;/*temporary variables*/

length lbl $40;
IF _type_='pattern' then do;do i=1 to &NV;
fpattern(_N_-3,I)=V(I);end;end;
IF _type_='mean' then do; do i=1 to &NV;
VMEAN(I)=V(I);end;end;
IF _type_='std' then do;do i=1 to &NV;
VSTD(I)=V(I);end;end;
IF _type_='N' then nnumbers=V(1);


IF lastfact then do;
%do i=1 %to &NV;
lbl="ST.NORMAL VAR.,M="||COMPRESS(PUT(VMEAN(&I),BEST8.))||
",STD="||COMPRESS(PUT(VSTD(&I),BEST8.));
call symput("LBL&I",lbl);
%end;
do k=1 to nnumbers;
do i=1 to &NV;vtemp(1)=rannor(&seed);end;
do i=1 to &NV; V(I)=0; do j=1 to &NV;
V(I)=V(I)+VTEMP(J)*fpattern(J,I);
end;end;
do i=1 to &NV; V(J)=vstd(I)*V(I)+vmean(I);end;
output;
end;
end;
rename %do i=1 %to &NV;V&I=&&V&I %end;
;
run;
Proc datasets nolist;
modify &out;
label %do j=1 %to &NV;&&N&I="&&LBL&I" %end;
;
run;
%mend;

data a(type=corr);
input _name_ $ _type_ $ day0 day15 day30 day45;
cards;
. mean 43.5708333 54.0887097 58.6017241 62.3077670
. std11.6626586 21.9286842 20.0695572 22.3352605
. n 1440 1440 1440 1440
day0corr 1.00000 . . .
day15 corr 0.48388 1.00000 . .
day30 corr 0.60101 0.79728 1.00000 .
day45 corr 0.53820 0.75942 0.90540 1.00000
;
run;
%rmnc(data=a,out=a10,seed=123)


运行完后提示“ERROR: 数组下标越界,位置: 行 28 列 230。





    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

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

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

GMT+8, 2025-12-31 17:25