一、SAS随机数函数和CALL子程序
SAS系统产生随机数,两种方式,利用SAS函数(Functions)或者CALL子程序(CALL Routines),它们的语法格式是:
方式 代码 说明
函数 var=name(seed,) var为存储随机数列的变量,name为特定的分布函数形式,seed为随机数种子,为特定分布要求的参数(可选)
CALL子程序 call name(seed,,var) 同上,记得seed=0, ±1,±2, , ± (2**31-2)
SAS可用的随机数函数列表如下(可以参见SAS Help and Documentation-SAS Products-Base SAS-SAS Language Dictionary-Functions and CALL Routines-Functions and CALL Routines by Category):
分布 SAS函数 说明
二项分布(Binomial) ranBin(seed,n,p) n为独立实验的次数,p为成功概率
指数分布(Exponential) ranExp(seed)
正态分布(Normal) ranNor(seed),or normal(seed) ranNor和normal是同质的,但normal没有相对应的CALL子程序
泊松分布(Poisson) ranPoi(seed,m) m为均值
均匀分布(Uniform) ranUni(seed),or uniform(seed) ranUni和uniform是同质的,但uniform没有相对应的CALL子程序
柯西分布(Cauchy) ranCau(seed)
伽玛分布(Gamma) ranGam(seed,a) a>0为形状参数
由分布律表格决定的离散分布(tabled probability distribution) ranTbl(seed,p1,p2,...pn) ∑p=1
三角分布(Triangular) ranTri(seed,h) h为斜边(最可能值)
上面的随机函数,除了normal和uniform,都可以由直接相应的CALL子程序调用。
例子
创建两个随机数变量,各包含3个记录,其中x1的种子为123,x2的种子为456:
data ranuni(drop=i);
retain seed1 123 seed2 456;
do i=1 to 3;
x1=ranuni(seed1);
x2=ranuni(seed2);
output;
end;
run;
proc print data=ranuni;run;
结果为:
Obs seed1 seed2 x1 x2
1 123 456 0.75040 0.32091
2 123 456 0.17839 0.90603
3 123 456 0.35712 0.22111
|