SAS常用的随机数函数简介文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运用SAS进行Monte Carlo蒙特卡罗模拟(第五弹):

SAS常用的随机数函数简介

前一篇文章我们介绍了两种产生随机数序列的方法,即随机数函数产生随机数序列,其语法为:var = name(seed,)和CALL子程序产生随机数序列,其语法为:call

name(seed,,var)。本节我们将介绍SAS常用的随机数函数(其概率函数我们这里就不作详细介绍,感兴趣的话请查阅相关文献;SAS随机数函数中的seed均为随机数种子):

SAS随机数函数分布情况参数说明

RANBIN(seed,n,p) 二项分布n:独立实验的次数,p:成功的概率

RANCAU(seed) 柯西分布

RANEXP(seed) 指数分布

RANGAM(seed,a) 伽玛分布 a:a>0,形状参数

RANNOR(seed) 正态分布

NORMAL(seed) 正态分布

RANPOI(seed,m) 泊松分布m:m>0,均值

RANTBL(seed,p1,p2,...p n) 离散分布p(i):p(i) >0,且Σp(i)=1,概率

RANTRI(seed,h) 三角分布h:0<=h<=1,斜边

RANUNI(seed) 均匀分布

UNIFORM(seed) 均匀分布

这里要注意:Functions RANUNI and UNIFORM are identical. Function UNIFORM cannot be utilized as a CALL routine.

文章中还举例说明了用上述基础的SAS随机数函数通过变换,可以产生很多有趣的分布,本人对此没有研究,请大家查看相关文献。所有的SAS随机数函数都是通过RANUNI随机

数函数变换得到的,例如我们通过就可以得到一个正态分布,通过e=-ln(u3)就可以得到指数分布。通过下面的例子我们可以证明刚才的结论:程序一:

DATA TEMP5(DROP=I);

DO I=1 TO 12;

RUNI=RANUNI(123);

OUTPUT;

END;

RUN;

PROC PRINT DATA=TEMP5;

RUN;

程序二:

DATA TEMP6(DROP=I);

DO I=1 TO 3;

RUNI=RANUNI(123);

RNOR=RANNOR(456);

REXP=RANEXP(789);

OUTPUT;

END;

RUN;

PROC PRINT DATA=TEMP6;

RUN;

程序一结果:

OBS RUNI

1 0.75040

2 0.32091

3 0.17839

4 0.90603

5 0.35712

6 0.22111

7 0.78644

8 0.39808

9 0.12467

10 0.18769

11 0.77618

12 0.43607

程序二结果:

OBS RUNI RNOR REXP

1 0.75040 0.6557

2 0.09868

2 0.35712 0.39428 0.92110

3 0.12467 0.29958 0.82994

从上面的结果我们可以看到,程序二的结果中,变量RUNI的三个值分别对应程序一结果里的程序二结果中的变量RUNI的第一、五、九个值。为什么中间只隔了两个函数,结果却隔了三个数值呢,原因如上面公式里提到的,产生一个正态分布需要两个均匀分布函数,而产生一个指数分布只需要一个均匀分布函数。

为了进一步说明刚才提到的正态分布和指数分布是由均匀分布函数转换而来的,我们可以看下面这个例子:

程序三:

DATA TEMP7(DROP=I);

DO I=1 TO 3;

RUNI=RANUNI(123);

U1=RANUNI(123);***三个均匀分布随机数;

U2=RANUNI(123);

U3=RANUNI(123);

RNOR=SQRT(-2*LOG(U1))*COS(4*ARSIN(1)*U2); ***正态分布公式;

REXP=-LOG(U3); ***指数分布公式;

OUTPUT;

END;

RUN;

PROC PRINT DATA=TEMP7;

RUN;

程序三结果:

OBS RUNI U1 U2 U3 RNOR REXP

1 0.75040 0.32091 0.17839 0.90603 0.6557

2 0.09868

2 0.35712 0.22111 0.78644 0.39808 0.39428 0.92110

3 0.12467 0.18769 0.77618 0.43607 0.29958 0.82994

这个结果要结合程序二的结果看,我们就会发现,两个程序的RNOR和REXP值是一样的,这就说明了这两个分布确实是通过上述公式由均匀分布转换而来的。

参考资料

Xitao Fan, etc..Monte Carlo Studies: A Guide for Quantitative Researchers. SAS Institute

Inc.,2002

本文章只用于学习,请不要用于商业目的,否则后果自负。

相关文档
最新文档