2024年4月26日发(作者:)

SAS产生随机数的方法 随机数 函数

和CALL 子程序

原文地址:SAS产生随机数的方法:随机数函数和CALL子程序作

者:supersasmacro运用SAS进行MonteCarlo蒙特卡罗模拟

(第四弹):

SAS产生随机数的方法:随机数函数和CALL子程序

本文未经作者同意严禁转载

1随机数函数产生随机数序列

随机数函数产生随机数序列的语法:var=name(seed,arg),我们在前面的文

章里使用的都是此类方法,变量var记录了由随机数种子为seed的随机函数

name产生的一个随机数。我们举两个例子来深入说明随机数函数产生随机数序

列的原理。

程序1:

DATATEMP1(DROP=I);

DOI=1TO10;

RUNI=RANUNI(123);

SEED=RUNI*(2*31-1);

OUTPUT;

END;

RUN;

PROCPRINTDATA=TEMP1;

RUN;

程序2:

DATATEMP2(DROP=I);

DOI=1TO5;

RUNI1=RANUNI(123);

RUNI2=RANUNI(456);*这里我们虽然指定了另一个随机数种子的值,但其实

并不起作用;

OUTPUT;

END;

RUN;

PROCPRINTDATA=TEMP2;

RUN;

程序1的结果:

程序2的结果:

将程序1的结果和程序2的结果进行比较,程序2中的RUNI1是程序1中

的RUNI的第1,3,5,7,9条数据,而程序2中的RUNI2是程序1中的RUNI的第

2,4,6,8,10条数据。我们可以看到,虽然RUNI2=RANUNI(456);,但是这条语句

中的随机数种子456并没有起作用。

RANUNI等随机函数的值产生后,SAS系统会隐含地将其转化为(0,1)的区间

内,如果要看到这些随机数序列原始的值,可以通过程序1中的

SEED=RUNI*(2*31-1);语句,结果如程序1输出结果中的seed所示。

2CALL子程序产生随机数序列