SAS语言RANNOR函数的seed
SAS语言的RANNOR(seed)函数,我把它理解成一个标准正太数据的随机生成器。但我不理解它的seed是做什么用的,没有不可以吗?
另外,我输入同一个seed的时候,出来的结果都是一样的,那这样岂不是不随机了,也就是说seed和函数值直接是一一对应的?举例如下:
Obs x rannor
1 1234567 -0.86590
2 123456 0.47265
3 12345 0.97195
4 0 1.77393
谢谢! 展开
(1)首先明确一点,SAS的rannor生成的标准正态伪随机数是通过对均匀分布伪随机数(ranuni函数)做Box-Muller变换得到的。而均匀分布伪随机数是通过余同数生成器(即Lehmer迭代公式)获得的,公式如下:
其中SAS内部设置a=397204094,m=2^31-1,c=0。上述公式生成的是(0,m)上的均匀伪随机数,SAS通过除以m获得(0,1)上的均匀伪随机数。所以,睁袜由上述算法可知,seed的作用就是给出这个迭代器的初始值R0。
(2)seed值应该说跟它后面生成的随机数是对应的。至于为什么你获得的随机数是一样的,原因在于rannor函数得到一个seed后,后面生成的随机数就是根据最初seed生成的清码一系列伪随机数。这个答早哪通过比较下面程序的结果就明白了:
data test;
do x=1234567,123456,12345,0;
rannor=rannor(x);
output;
end;
run;
data test2;
do i=1 to 4;
rannor=rannor(1234567);
output;
end;
run;
proc print data=test;
run;
proc print data=test2;
run;
广告 您可能关注的内容 |