SAS中文论坛

标题: 请高手帮忙查找下出现这类问题原因呢,谢谢! [打印本页]

作者: shiyiming    时间: 2011-11-17 23:02
标题: 请高手帮忙查找下出现这类问题原因呢,谢谢!
[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;
作者: shiyiming    时间: 2011-11-18 09:51
标题: Re: 请高手帮忙查找下出现这类问题原因呢,谢谢!
不仔细呀!不仔细....
[quote:11jigk77]%macro ran(k)
[/quote:11jigk77]后面不是少了个分号么...




欢迎光临 SAS中文论坛 (https://www.mysas.net/forum/) Powered by Discuz! X3.2