|
楼主

楼主 |
发表于 2011-11-17 23:02:45
|
只看该作者
请高手帮忙查找下出现这类问题原因呢,谢谢!
[code:3fcs8dw2]*:使用混合同余法产生的1000个(0,1)上的均匀分布的随机数;
%macro mixmod(x0=,a=,c=,m=,n=);
data want(keep=x r);
retain temp;
temp=&x0.;
do i=1 to &n.;
x=mod(&a.*temp+3,&m.);
r=x/&m.;
temp=x;
output;
end;
run;
%mend;
%mixmod(x0=71,w=97,c=3,m=1000,n=1000);
*:利用ziggurat算法和生成的随机数来生成服从标准正态分布的随机数;
%macro ran(k)
data range&k(keep=r ran);
set want nobs=obs;
array lags{&k};
lags(1)=lag(r);
do i=2 to &k.;
lags(i)=lag(lags(i-1));
end;
if _n_ ge &k. and _n_ le obs-&k. then do;
ran=sum(of lag:)-&k./2;
output;
end;
run;
%mend;
%ran(6);[/code:3fcs8dw2]
其中宏ran出错,结果如下:
WARNING: 没有解析宏 RAN 的调用。
ERROR 180-322: 语句无效或未按正确顺序使用。
1192 %ran(6);
-
180
而我单独把宏ran里的内容取出来,并单独给宏变量k赋个值来测试又通过,这是啥原因呢,请高手们帮忙解决下这个问题,谢谢...
%let k=12;
data range&k(keep=r ran);
set want nobs=obs;
array lags{&k};
lags(1)=lag(r);
do i=2 to &k.;
lags(i)=lag(lags(i-1));
end;
if _n_ ge &k. and _n_ le obs-&k. then do;
ran=sum(of lag:)-&k./2;
output;
end;
run; |
|