SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 914|回复: 1
打印 上一主题 下一主题

请高手帮忙查找下出现这类问题原因呢,谢谢!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-11-18 09:51:56 | 只看该作者

Re: 请高手帮忙查找下出现这类问题原因呢,谢谢!

不仔细呀!不仔细....
[quote:11jigk77]%macro ran(k)
[/quote:11jigk77]后面不是少了个分号么...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-9-6 21:28 , Processed in 0.070494 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表