SAS经常使用函数

SAS经常使用函数数组

1、数学函数 函数

ABS(x) 求x的绝对值。 spa

MAX(x1,x2,…,xn) 求全部自变量中的最大一个。 ip

MIN(x1,x2,…,xn) 求全部自变量中的最小一个。 ci

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右边最近的整数。 table

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,等等。 

 

2、数组函数 

数组函数计算数组的维数、上下界,有利于写出可移植的程序。数组函数包括: 

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维的上界。 

 

3、字符函数 

较重要的字符函数有: 

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。 

example1: substr

data_null_;

x="1234ABCD";

y=substr(x,3,2);

substr(x,1,2)="EF";

put x=/ y=;

run;

输出:

x=EF34ABCD 

y=34

注意:

1. 必须是从字符变量中提取,对数值变量不起做用,必须转换为字符变量,若是是数字变量,在调用substr函数时会自动把数字变量转为字符变量,不过须要注意的是转化为的字符变量采用的是best12.格式。

2. n的长度不能超过p后面的长度,例如s=scorecard,b=Substr(s,5,5)系统会有提示。

3. 若是缺失n的话,SAS则会提取p后面所有字符,若是是替换的话,则不能缺失n。

4. 对于汉字的截取若使用substr函数将输出乱码,使用ksubstr函数便可,另外,ksubstrb函数可针对字节进行截取。

example2: tranwrd

data_null_;

x="ABabCDEFGABCD";

y=tranwrd(x,"AB","ef");

puty=;

run;

输出:y=efabCDEFGefCD

注意:

TRANWRD函数的字符串替换区分大小写。

example3: compress

COMPRESS (,,)

source 指定一个要被移除字符的源字符串。

chars  指定一栏初始字符,默认它是要从source里移除的。

modifiers  指定一个修饰符,函数的具体功能。如:

a 增长(A - Z, a - z)到初始字符里(chars)。

d 增长数字到初始字符里(chars)。

f 增长下划线和字母 (A - Z, a - z) 到初始字符里(chars)。

g 增长图形字符到初始字符里(chars)。

k 不移除初始字符(chars)而是返回这些字符。

l  增长小写字母(a - z)。

n 增长数字、下划线和字母(A - Z, a - z)。

p 增长标点符号。

s 增长空格,包括空格,水平制表符,垂直制表符,回车符,换行符和换页符。

t 剪掉尾部空格。

u 增长大写字母(A - Z)。      

w 增长可印刷的字符。

X 增长十六进制字符

data_null_;

x="ABabCDEFGABCD";

y=compress(x,"A","l");

puty=;

run;

输出:y=BCDEFGBCD

注意:

1. 只有source,移除空格。

2. 只有source,chars时,从source中移除chars。

3.source ,chars,modifiers都有时,modifiers  K决定保留仍是移除。无K时,移除chars加上modifiers指定的。

example4: cat

CAT(A,B): 拼接字符串A和B并保留首尾所有空格(同A||B)

CATS(A,B): 拼接字符串A和B并去掉首尾所有空格(同strip(A)||strip(B))

CATX("x",A,B): 拼接字符串A和B并去掉首尾所有空格,而且在字符串之间加上一个指定的字符串"x"(同strip(A)||"x"||strip(B))

CATT(A,B): 拼接字符串A和B并去掉各字符串尾部空格(同trim(A)||trim(B))

example:

data_null_;

a = 'am';

b = 'learning';

c =' SAS';

s1 = cat(a,b,c);

s2 = cats(a,b,c);

s3 = catx('_',a,b,c);

s4 = catt('I',a,b,c);

put s1 = / s2 = / s3 = / s4 = ;

run;

输出:

s1 = am learning SAS

s2 = am learning SAS

s3 = am_learning_SAS

s4 = I am learning SAS

 

4、日期和时间函数 

经常使用日期和时间函数有: 

MDY(m,d,yr) 生成yr年m月d日的SAS日期值 

 

Statements

Results

mn=8; dy=27; yr=12;

birthday= mdy(mn,dy,yr);

put birthday;

 

08/27/2012

mn=7; dy=11; yr=12;

anniversary = dy(mn,dy,yr);

put anniversary;

 

11JUL2012

 

YEAR(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软件使用手册》。 

 

5、分布密度函数、分布函数 

做为一个统计计算语言,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为相关系数。 

 

6、分位数函数 

分位数函数是几率分布函数的反函数。其自变量在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分位数。 

 

7、随机数函数 

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的指数分布的随机数。参数为lambda的指数分布能够用RANEXP(seed)/lambda获得。 

另外若Y=alpha-beta*LOG(RANEXP(seed)),则Y为位置参数为alpha,尺度参数为beta的极值分布。若Y=FLOOR(-RANEXP(seed)/LOG(p)),那么Y是具备参数p的几何分布变量。 

4.伽马分布随机数 

RANGAM(seed, alpha),seed为任意数值常数,alpha>0,获得参数为alpha的伽马分布。设X=RANGAM(seed, alpha),则Y=beta*X是形状参数为alpha,尺度参数为beta的GAMMA分布随机数。若是alpha是整数,则Y=2*X是自由度为 2*alpha的卡方分布随机数。 

若是alpha是正整数,则Y=beta*X是Erlang分布随机数,为alpha个独立的均值为beta的指数分布变量的和。 

若是Y1=RANGAM(seed,alpha),Y2=RANGAM(seed,beta),在Y=Y1/(Y1+Y2)是参数为(alpha,beta )的贝塔分布随机数。 

5.三角分布随机数 

RANTRI(seed,h),seed为任意数值常数,0<h<1。此分布在0到1取值,密度在0到h 之间为2x/h,在h到1之间为2(1-x)/(1-h)。 

6.柯西分布随机数 

RANCAU(seed),seed为任意数值常数。产生位置参数为0,尺度参数为1的标准柯西分布随机数。Y=alpha+beta*RANCAU(seed)为位置参数为alpha,尺度参数为beta的通常柯西分布随机数。 

7.二项分布随机数 

RANBIN(seed,n,p)产生参数为(n,p)的二项分布随机数,seed为任意数值。 

8.泊松分布随机数 

RANPOI(seed,lambda)产生参数为lambda>0的泊松分布随机数,seed为任意数值。 

9.通常离散分布随机数 

RANTBL(seed, p1, …, pn)生成取1,2,…,n的几率分别为p1,…,pn的离散分布随机数。 

 

8、样本统计函数 

样本统计函数把输入的自变量做为一组样本,计算样本统计量。其调用格式为“函数名(自变量1,自变量2,…,自变量n)”或者“函数名(OF 变量名列表)”。好比SUM是求和函数,若是要求x1,x2,x3的和,能够用SUM(x1,x2,x3),也能够用SUM(OF x1-x3)。这些样本统计函数只对自变量中的非缺失值进行计算,好比求平均时把缺失值不计入内。 

各样本统计函数为: 

MEAN 均值 

MAX 最大值 

MIN 最小值 

N 非缺失数据的个数 

NMISS 缺失数值的个数。 

SUM 求和 

VAR 方差 

STD 标准差 

STDERR 均值估计的标准偏差,用STD/SQRT(N)计算。 

CV 变异系数 

RANGE 极差 

CSS 离差平方和 

USS 平方和 

SKEWNESS 偏度 

KURTOSIS 峰度