sas常用函数
- 格式:docx
- 大小:21.83 KB
- 文档页数:7
常用统计分布函数SAS 实现1. 正态分布密度函数作图分布函数作图产生随机数 其它作图(1)μ=2, σ=0.5, 1, 2。
三图重叠在一个坐标系内。
(2)μ=2, σ=0.5, 1, 2, 5, 10。
四图重叠在一个坐标系内。
(3)μ= 0,1,2 σ=1。
三图重叠在一个坐标系内。
(4)μ=0, σ=1用SAS 软件产生标准正态的概率分布表 其它概率计算注意)(2121)(22)(222σμπσπσμσμ-Φ===--∞---∞-⎰⎰x dt edt ex F t x t x于是,对任意的实数)(,2121x x x x <有,(1)μ=1.5,σ=2,产生正态概率分布表。
(2)μ=1.5,σ=2,求P(X>0)。
(3)μ=1.5,σ=2,求P(-1<X<2)。
(4)用SAS 计算下面概率,并与查表结果对比。
~(1,4)X N ,求( 1.6),(0 1.6),(||4)P X P X P X ≤<≤>分位数定义:设~(0,1)X N ,若Z α满足条件(),01P X Z ααα>=<<,则称Z α为标准正态分布的上α分位点。
(1)计算0.001,0.0025,0.005和0.010的下分位数。
(2) 计算0.001,0.0025,0.005和0.010的上分位数。
本人不同意分为上下分位数,分位数就是分位数,定义为:若Z α满足条件(),01P X Z ααα<=<<则称点Z α为随机变量的α分位数。
单边的, 双边的,注意和以均值为中心,1,2,3倍标准差宽度区间的概率值的区别。
其它可参考例子(1)概率的两种计算公式data ;p1=PROBNORM(1)-PROBNORM(-1); put p1=; p2= PROBNORM(2)-PROBNORM(-2); put p2=; p3= PROBNORM(3)-PROBNORM(-3); put p3=; run ;p1=0.6826894921 p2=0.9544997361 p3=0.9973002039data;p1=2*PROBNORM(1)-1; put p1=;p2=2*PROBNORM(2)-1; put p2=;p3=2*PROBNORM(3)-1; put p3=;run;p1=0.6826894921p2=0.9544997361p3=0.9973002039(2)以均值为中心的区间与概率如,以μ为中心,需要几倍标准差σ距离所构成的区间,其区间内的概率等上面(1)中的概率。
SAS常用的随机数函数简介文档运用SAS进行Monte Carlo蒙特卡罗模拟(第五弹):SAS常用的随机数函数简介前一篇文章我们介绍了两种产生随机数序列的方法,即随机数函数产生随机数序列,其语法为:var = name(seed,)和CALL子程序产生随机数序列,其语法为:callname(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 RUNI1 0.750402 0.320913 0.178394 0.906035 0.357126 0.221117 0.786448 0.398089 0.1246710 0.1876911 0.7761812 0.43607程序二结果:OBS RUNI RNOR REXP1 0.75040 0.65572 0.098682 0.35712 0.39428 0.921103 0.12467 0.29958 0.82994从上面的结果我们可以看到,程序二的结果中,变量RUNI的三个值分别对应程序一结果里的程序二结果中的变量RUNI的第一、五、九个值。
sas 循环函数1. DO循环:SAS中最基本也是最常用的循环函数是DO循环。
它允许用户按照给定的次数重复执行一段代码。
DO循环的语法如下:```DO index_variable = start_value TO stop_value BY increment_value;/* 重复执行的代码 */END;```在这个循环中,index_variable是循环索引变量,start_value是索引的起始值,stop_value是索引的结束值,increment_value是每次循环迭代中索引的增量。
例如,下面的代码将打印1到10之间所有的奇数:```DATA test;DO i = 1 TO 10 BY 2;IF mod(i, 2) = 1 THENPUT i;END;RUN;2. DO WHILE循环:DO WHILE循环是一种基于条件的循环函数。
它在每次循环迭代之前检查一个条件,只有在条件满足时才继续执行。
DO WHILE循环的语法如下:```DO WHILE (condition);/* 循环执行的代码 */END;```在这个循环中,condition是一个逻辑表达式,只有在条件为TRUE时才会继续执行循环体中的代码。
例如,下面的代码将重复从1开始加1,直到总和超过100:```DATA test;total = 0;count = 0;DO WHILE (total < 100);count = count + 1;total = total + count;END;PUT count total;RUN;3. DO UNTIL循环:DO UNTIL循环与DO WHILE循环非常相似,只是在判断条件的时候相反。
即只有在条件为FALSE时才继续执行循环体中的代码。
DO UNTIL循环的语法如下:```DO UNTIL (condition);/* 循环执行的代码 */END;```在这个循环中,condition是一个逻辑表达式,只有在条件为FALSE时才会继续执行循环体中的代码。
SAS的函数对重要的函数加以介绍SAS提供了比一般程序设计语言多几倍的标准函数可以直接用在数据步的计算中,其中包括所有语言都有的数学函数、字符串函数,还包括特有的统计分布函数、分位数函数、随机数函数、日期时间函数、财政金融函数,等等。
这些函数的调用方法类似其它语言,比如求x1,x2,x3三个自变量的和可以用函数SUM(x1,x2,x3) 。
另外,SAS还提供了函数调用的另一种语法以便于把多个数据集变量作为函数自变量,其格式为“函数名(OF 变量名列表)”,其中变量名列表可以是任何合法的变量名列表,比如x1 ,x2,x3的和等价地可以用SUM(OF x1 x2 x3)或SUM(OF x1-x3)表示。
注意两种写法不能混在一起,比如SUM(OF x1,x2,x3)和SUM(x1-x3)都是错的。
本小节对重要的函数加以介绍,其它详见《SAS软件:Base SAS软件使用手册》(高惠璇等编译,中国统计出版社出版)。
一、数学函数ABS(x) 求x的绝对值。
MAX(x1,x2,…,xn) 求所有自变量中的最大一个。
MIN(x1,x2,…,xn) 求所有自变量中的最小一个。
MOD(x,y) 求x除以y的余数。
SQRT(x) 求x的平方根。
ROUND(x,eps) 求x按照eps指定的精度四舍五入后的结果,比如ROUND(5654.5654,0.01) 结果为5654.57,CEIL(x) 求大于等于x的最小整数。
当x为整数时就是x本身,否则为x右边最近的整数。
FLOOR(x) 求小于等于x的最大整数。
当x为整数时就是x本身,否则为x左边最近的整数。
INT(x) 求x扔掉小数部分后的结果。
FUZZ(x) 当x与其四舍五入整数值相差小于1E-12时取四舍五入。
LOG(x) 求x的自然对数。
LOG10(x) 求x的常用对数。
EXP(x) 指数函数。
SIN(x), COS(x), TAN(x) 求x的正弦、余弦、正切函数。
Sas常用函数(转)一、数学函数ABS(x) 求x的绝对值。
MAX(x1,x2,…,xn) 求所有自变量中的最大一个。
MIN(x1,x2,…,xn) 求所有自变量中的最小一个。
MOD(x,y) 求x除以y的余数。
SQRT(x) 求x的平方根。
ROUND(x,eps) 求x按照eps指定的精度四舍五入后的结果,比如ROUND(5654.5654,0.01) 结果为5654.57,ROUND(5654.5654,10)结果为5650。
CEIL(x) 求大于等于x的最小整数。
当x为整数时就是x本身,否则为x右边最近的整数。
FLOOR(x) 求小于等于x的最大整数。
当x为整数时就是x本身,否则为x左边最近的整数。
INT(x) 求x扔掉小数部分后的结果。
FUZZ(x) 当x与其四舍五入整数值相差小于1E-12时取四舍五入。
LOG(x) 求x的自然对数。
LOG10(x) 求x的常用对数。
EXP(x) 指数函数。
SIN(x), COS(x), TAN(x) 求x的正弦、余弦、正切函数。
ARSIN(y) 计算函数y=sin(x)在区间的反函数,y取[-1,1]间值。
ARCOS(y) 计算函数y=cos(x)在的反函数,y取[-1,1]间值。
ATAN(y) 计算函数y=tan(x)在的反函数,y取间值。
SINH(x), COSH(x), TANH(x) 双曲正弦、余弦、正切ERF(x) 误差函数GAMMA(x) 完全函数此外还有符号函数SIGN,函数一阶导数函数DIGAMMA,二阶导数函数TRIGAMMA ,误差函数余函数ERFC,函数自然对数LGAMMA,ORDINAL函数,AIRY 函数,DAIRY函数,Bessel 函数JBESSEL,修正的Bessel函数IBESSEL,等等。
二、数组函数数组函数计算数组的维数、上下界,有利于写出可移植的程序。
数组函数包括:DIM(x) 求数组x第一维的元素的个数(注意当下界为1时元素个数与上界相同,否则元素个数不一定与上界相同)。
DIM k(x) 求数组x第k维的元素的个数。
LBOUND(x) 求数组x第一维的下界。
HBOUND(x) 求数组x第一维的上界。
LBOUND k(x) 求数组x第k维的下界。
HBOUND k(x) 求数组x第k维的上界。
三、字符函数较重要的字符函数有:TRIM(s) 返回去掉字符串s的尾随空格的结果。
UPCASE(s) 把字符串s中所有小写字母转换为大写字母后的结果。
LOWCASE(s) 把字符串s中所有大写字母转换为小写字母后的结果。
INDEX(s,s1) 查找s1在s中出现的位置。
找不到时返回0。
RANK(s) 字符s的ASCII码值。
BYTE(n) 第n个ASCII码值的对应字符。
REPEAT(s,n) 字符表达式s重复n次。
SUBSTR(s,p,n) 从字符串s中的第p个字符开始抽取n个字符长的子串TRANWRD(s,s1,s2) 从字符串s中把所有字符串s1替换成字符串s2后的结果。
其它字符函数还有COLLATE,COMPRESS,INDEXC,LEFT,LENGTH,REVERSE,RIGHT,SCAN ,TRANSLATE,VERIFY,COMPBL,DEQUOTE,INDEXW,QUOTE,SOUNDEX,TRIMN,INDEXW。
四、日期和时间函数常用日期和时间函数有:MDY(m,d,yr) 生成yr年m月d日的SAS日期值Statements Resultsmn=8; dy=27; yr=12;birthday= mdy(mn,dy,yr);put birthday; 08/27/2012mn=7; dy=11; yr=12;anniversary= mdy(mn,dy,yr);put anniversary; 11JUL2012YEAR(date) 由SAS日期值date得到年MONTH(date) 由SAS日期值date得到月DAY(date) 由SAS日期值date得到日WEEKDAY(date) 由SAS日期值date得到星期几QTR(date) 由SAS日期值date得到季度值HMS(h,m,s) 由小时h、分钟m、秒s生成SAS时间值DHMS(d,h,m,s) 由SAS日期值d、小时h、分钟m、秒s生成SAS日期时间值DATEPART(dt) 求SAS日期时间值dt的日期部分INTNX(interval,from,n) 计算从from开始经过n个in间隔后的SAS日期。
其中interval 可以取'YEAR'、'QTR'、'MONTH'、'WEEK'、'DAY'等。
比如,INTNX('MONTH', '16Dec1997'd, 3)结果为1998年3月1日。
注意它总是返回一个周期的开始值。
INTCK(interval,from,to) 计算从日期from到日期to中间经过的interval间隔的个数,其中interval 取'MONTH'等。
比如,INTCK('YEAR', '31Dec1996'd, '1Jan1998'd)计算1996年12 月31日到1998年1月1日经过的年间隔的个数,结果得2,尽管这两个日期之间实际只隔1年。
其它日期和时间函数还有DATE、TODAY、DATETIME、DATEJUL、JULDATE、HOUR、MINUTE、SECOND 、TIME、TIMEPART等。
详见《SAS系统-Base SAS软件使用手册》、《SAS系统-SAS/ETS软件使用手册》。
五、分布密度函数、分布函数作为一个统计计算语言,SAS提供了多种概率分布的有关函数。
分布密度、概率、累积分布函数等可以通过几种统一的格式调用,格式为分布函数值= CDF(' 分布', x <, 参数表>);密度值= PDF(' 分布', x <, 参数表>);概率值= PMF(' 分布', x <, 参数表>);对数密度值= LOGPDF(' 分布', x <, 参数表>);对数概率值= LOGPMF(' 分布', x <, 参数表>);CDF计算由'分布'指定的分布的分布函数,PDF计算分布密度函数值,PMF计算离散分布的分布概率,LOGPDF为PDF的自然对数,LOGPMF为PMF的自然对数。
函数在自变量x处计算,<, 参数表>表示可选的参数表。
分布类型取值可以为: BERNOULLI, BETA, BINOMIAL, CAUCHY, CHISQUARED, EXPONENTIAL, F, GAMMA, GEOMETRIC, HYPERGEOMETRIC, LAPLACE, LOGISTIC, LOGNORMAL, NEGBINOMIAL, NORMAL 或GAUSSIAN, PARETO, POISSON, T, UNIFORM, WALD 或IGAUSS, and WEIBULL。
可以只写前四个字母。
例如,PDF('NORMAL', 1.96)计算标准正态分布在1.96处的密度值(0.05844),CDF('NORMAL', 1.96)计算标准正态分布在1.96处的分布函数值(0.975)。
PMF对连续型分布即PDF。
除了用上述统一的格式调用外,SAS还单独提供了常用的分布的密度、分布函数。
PROBNORM(x) 标准正态分布函数PROBT(x,df<,nc>) 自由度为df的t分布函数。
可选参数nc为非中心参数。
PROBCHI(x,df<,nc>) 自由度为df的卡方分布函数。
可选参数nc为非中心参数。
PROBF(x,ndf,ddf<,nc>) F(ndf,ddf)分布的分布函数。
可选参数nc为非中心参数。
PROBBNML(p,n,m) 设随机变量Y服从二项分布B(n,p),此函数计算P(Y m)。
POISSON((lambda,n) 参数为lambda的Poisson分布Y n的概率。
PROBNEGB(p,n,m) 参数为(n,p)的负二项分布Y m的概率。
PROBHYPR(N,K,n,x<,r>) 超几何分布的分布函数。
设N个产品中有K个不合格品,抽取n个样品,其中不合格品数小于等于x的概率为此函数值。
可选参数r是不匀率,缺省为1 ,r代表抽到不合格品的概率是抽到合格品概率的多少倍。
PROBBETA(x,a,b) 参数为(a,b)的Beta分布的分布函数。
PROBGAM(x,a) 参数为a的Gamma分布的分布函数。
PROBMC 计算多组均值的多重比较检验的概率值和临界值。
PROBBNRM(x,y,r) 标准二元正态分布的分布函数,r为相关系数。
六、分位数函数分位数函数是概率分布函数的反函数。
其自变量在0到1之间取值。
分位数函数计算的是分布的左侧分位数。
SAS提供了六种常见连续型分布的分位数函数。
PROBIT(p) 标准正态分布左侧p分位数。
结果在-5到5之间。
TINV(p, df <,nc>) 自由度为df的t分布的左侧p分位数。
可选参数nc为非中心参数。
CINV(p,df<,nc>) 自由度为df的卡方分布的左侧p分位数。
可选参数nc为非中心参数。
FINV(p,ndf,ddf<,nc>) F(ndf,ddf)分布的左侧p分位数。
可选参数nc为非中心参数。
GAMINV(p,a) 参数为a的伽马分布的左侧p分位数。
BETAINV(p,a,b) 参数为(a,b)的贝塔分布的左侧p分位数。
七、随机数函数SAS可以用来进行随机模拟。
它提供了常见分布的伪随机数生成函数。
1.均匀分布随机数有两个均匀分布随机数函数:UNIFORM(seed),seed必须是常数,为0,或5位、6位、7位的奇数。
RANUNI(seed),seed为小于2**31-1的任意常数。
在同一个数据步中对同一个随机数函数的多次调用将得到不同的结果,但不同数据步中从同一种子出发将得到相同的随机数序列。
随机数种子如果取0或者负数则种子采用系统日期时间。
2.正态分布随机数有两种,NORMAL(seed),seed为0,或5位、6位、7位的奇数。
RANNOR(seed),seed为任意数值常数。
3.指数分布随机数RANEXP(seed),seed为任意数值,产生参数为1的指数分布的随机数。