全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
11935 9
2012-12-31
我想问一下sas里关于产生随机数的问题,请教高手指点。seed的值可以随便取吗?有什么要求吗?求解!十分感谢。
我要产生AR(1),自相关系数为你0.99的序列,重复产生60次,下面的代码对吗?
%macro simu(r);
%do t=1 %to &r;data a&t;y=0;do i=1 to 10000;x=normal(&t);y=0.99*y+x;output;drop i x;end;run;%end;
%mend simu;
%simu(60);
二维码

扫码加我 拉你入群

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

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

全部回复
2012-12-31 16:13:31
计算机生成的随机数,都是伪随机数,是根据数字生成的随机数。
通俗的讲就是每个seed对应一列随机数,不同seed对应的随机数列也不一样,
SAS中也是根据seed产生随机数列,
当seed取0的时候,seed的值其实是系统当前的时间
二维码

扫码加我 拉你入群

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

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

2013-1-1 15:05:05
ziyenano 发表于 2012-12-31 16:13
计算机生成的随机数,都是伪随机数,是根据数字生成的随机数。
通俗的讲就是每个seed对应一列随机数,不同 ...
十分感谢您,谢谢!
那我写的程序有错误吗?运算结果和理论值差距有点大!具体程序如下:
产生自相关系数为0.99的ar(1)的序列
%macro simu(r);
%do t=1 %to &r;data a&t;y=0;do i=1 to 10000;x=normal(&t);y=0.99*y+x;output;end;drop i x;;run;%end;
%mend simu;
%simu(60);
对每个数据集的变量y每6个为一组,计算6个数的均值
%macro exp(r);%do i=1 %to &r;PROC EXPORT DATA= a&i OUTFILE= "E:\学习资料\paper simulation\&i..txt"  DBMS=TAB REPLACE;PUTNAMES=no;run;
data group&i;infile "E:\学习资料\paper simulation\&i..txt";input y1-y6;avg=mean(of y1-y6);stand=std(of y1-y6);run;%end;
%mend exp;
%exp(60);
求数据集分组后均值的均值
%macro std(r);
%do i=1 %to &r;proc means data=group&i mean std;var avg;output out=directlystd&i mean=means std=stdxbar;run;%end;
%mend std;
%std(60);
60个数据集均值的评均
data directlystd;set directlystd1-directlystd60;run;
proc means data=directlystd;var means stdxbar;run;
输出结果如下:

                                          MEANS PROCEDURE

           变量        N            均值          标准差          最小值          最大值
           -----------------------------------------------------------------------------
           means      60       0.2144988       1.0364777      -2.1021175       3.5494270
           stdxbar    60       6.8842706       0.4956768       6.1270661       8.2991823
           -----------------------------------------------------------------------------
而means的理论值应该是0 啊,差的有点大!求解?是不是程序不对那?再次谢谢!
二维码

扫码加我 拉你入群

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

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

2013-1-1 15:45:23
ziyenano 发表于 2012-12-31 16:13
计算机生成的随机数,都是伪随机数,是根据数字生成的随机数。
通俗的讲就是每个seed对应一列随机数,不同 ...
我觉得这段代码有问题,见下
%macro simu(r);
%do t=1 %to &r;data a&t;y=0;do i=1 to 10000;x=normal(&t);y=0.99*y+x;output;drop i x;end;run;%end;
%mend simu;
%simu(60);
如果我有同样的代码产生
%macro simu(r);
%do t=1 %to &r;data b&t;y=0;do i=1 to 10000;x=normal(&t);y=0.99*y+x;output;drop i x;end;run;%end;
%mend simu;
%simu(60);
数据集a1-a60和b1-b60竟然相同,这和随机性不符。如果改为x=normal(0)模拟了几次感觉还可以。所以感觉问题应该出在&t宏这块,但具体原因不知道,求解,十分感谢!谢谢!
还有,rannor和normal均可产生标准正态分布,他俩什么区别,上面的代码用rannor(0)模拟觉得是对的。但用normal(0)模拟的结果还是偏大,不理想,求解,谢谢。
二维码

扫码加我 拉你入群

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

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

2013-1-2 19:54:41
fyfzhdsfdx 发表于 2013-1-1 15:45
我觉得这段代码有问题,见下
%macro simu(r);
%do t=1 %to &r;data a&t;y=0;do i=1 to 10000;x=normal ...
你这里种子取&t
&t就是循环从1到60
在两个宏里都一样
种子一样随机数当然就一样了

还有rannor和normal功能一样,只不过rannor命名更规范,还有call rannor可以用
而normal估计是历史遗留下来的函数
二维码

扫码加我 拉你入群

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

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

2013-1-4 23:15:11
playmore 发表于 2013-1-2 19:54
你这里种子取&t
&t就是循环从1到60
在两个宏里都一样
十分感谢
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群