Lesson 3 SAS实用函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lesson 3 SAS实用函数相关的知识,希望对你有一定的参考价值。
参考技术A统计描述函数的计算功能可以由算术函数完成:
统计描述函数 是针对 每个观测的多个变量 进行计算的,而不是针对 某个变量的多个观测 进行计算。( 即计算行的平均值)
如果想用这些函数求某一变量的多个观测的统计描述指标,可以先利用 proc transpose 将数据转置,然后再用函数求出。
proc means 可以计算 每个变量的多个观测 的均值。 (即计算列的平均值)
结果为:
结果为:
length(变量或字符串)
计算变量或字符串长度,包括空格,对空值返回0
substrn(变量,起始位置<,提取长度>);
起始位置表示开始提取的位置,如果该值为非正值,则从第一位开始提取。
提取长度表示提取多少位,如果该值为非正值,则提取0位,也就是不提取任何字符;如果不加该参数,默认提取从起始位置以后的所有字符。
结果为
这两个函数的意思都是从某变量或字符串中,根据指定的起始位置,查找相应的内容。 如果找到,就返回找到的位置;如果找不到,返回0。find()与findc()类似于逻辑算符 。
如果不加起始位置,默认从第一个字符开始查找。修饰符i的意思是忽略大小写,这样即使你录入和查找的内容大小写不同,也一样可以找到。
find和findc函数都是查找字符,返回其位置,但当指定查找内容是多个字符的时候,它们会有很大差异。
compress(变量或字符串<,欲去除的字符><,"修饰符">)
该函数的作用是从变量或字符串中去掉“欲去除的字符”,如果不指定“欲去除的字符”,默认是去除空格。
该函数还可以指定不同的修饰符实现相应的作用,常用的修饰符主要有以下几个:
tranwrd(变量或字符串,查找值,替换值)
missing(变量)
其作用就是判断指定的变量是否存在缺失值, 是则返回1,不是返回0。相当于逻辑变量。 该变量既可以是字符型变量也可以是数值型变量。
补充:日期时间变量的格式有 ymdttm
结果为
yrdif (开始日期,结束日期, “actual")
该函数返回从“开始日期”到“结束日期”的实际差值(单位为年),根据不同的“计算依据”,会得到不同的计算结果。
“actual” 意思是根据当年的实际天数来计算(考虑到当年是否闰年等情况)。
lag(变量)、lag2(变量)、lag3(变量)、……
dif(变量)、dif2(变量)、dif3(变量)、……
这两个函数在处理动态数据、追踪数据方面几乎是必备的
计算年度环比
结果:
SAS常用函数
本文根据网络资源和书籍结合自己的经验对SAS的常用函数进行了整理。主要内容包括:
1. 字符函数
2. 日期和时间函数
3. 数组函数
4. 数学函数
5. 样本描述统计函数
6. 特殊函数
7. 随机数函数
8. 宏函数
9. 变量信息函数
10.分布密度函数、分布函数
11.分位数函数
一、字符函数
1.1 TRIM(s) 返回去掉字符串s的尾随空格的结果。
1.2 UPCASE(s) 把字符串s中所有小写字母转换为大写字母后的结果。
1.3 LOWCASE(s) 把字符串s中所有大写字母转换为小写字母后的结果。
1.4 INDEX(s,s1) 查找s1在s中出现的位置。找不到时返回0。
1.5 RANK(s) 字符s的ASCII码值。
1.6 BYTE(n) 第n个ASCII码值的对应字符。
1.7 REPEAT(s,n) 字符表达式s重复n次。
1.8 SUBSTR(s,p,n) 从字符串s中的第p个字符开始抽取n个字符长的子串
1.9 TRANWRD(s,s1,s2) 从字符串s中把所有字符串s1替换成字符串s2后的结果。
1.10 PROPCASE(s) 把字符串s的第一个字母大写。
1.11 CATX(d,s1,s2) 把字符串s1和字符串s2通过d(如‘-‘)连接返回结果。
1.12 COMPBL(s) 把字符串s中的不同长度空格变为长度为1的空格返回结果。
1.13 COMPRESS(s,c,m) 将字符串c(默认为空格)从字符串中移除,m为对d的添加项如下:
d 增加数字到初始字符里(chars)。
f 增加下划线和字母 (A - Z, a - z) 到初始字符里(chars)。
g 增加图形字符到初始字符里(chars)。
k 不移除初始字符(chars)而是返回这些字符。
l 增加小写字母(a - z)。
n 增加数字、下划线和字母(A - Z, a - z)。
p 增加标点符号。
s 增加空格,包括空格,水平制表符,垂直制表符,回车符,换行符和换页符
u 增加大写字母(A- Z)。
a增加(A- Z, a - z)到初始字符里(chars)。
1.14 ANYALNUM (s,start) 查找字符串s中从start位置开始第一个数字或者字母的位置。
1.15 ANYALPHA (s,start) 查找字符串s中从start位置开始第一个字母的位置。
1.16 ANYDIGIT (s,start) 查找字符串s中从start位置开始第一个数字的位置。
1.17 ANYPUNCT (s,start) 查找字符串s中从start位置开始第一个特殊标点字符的位置。
1.18 ANYSPACE(s,start)查找字符串s中从start位置开始第一个空格的位置。
1.19 ANYUPPER (s,start) 查找字符串s中从start位置开始第一个大写字母的位置。
1.20 NOTALNUM(s,start)查找字符串s中从start位置开始第一个非数字和字母的位置。
1.21 NOTALPHA (s,start) 查找字符串s中从start位置开始第一个非字母的位置。
1.22 NOTUPPER (s,start) 查找字符串s中从start位置开始第一个非大写字母的位置。
1.23 FIND(s,c,m,start)查找字符串s中从start开始字符串c的第一次出现的位置,m为i时忽略大小写。
1.24 FINDC(s,c,m,start)查找字符串s中从start开始字符串c中任何一个字符第一次出现得的位置,m为对d的添加项如下:
i 忽略大小写
t 忽略字符串两边首尾的空格
k 查找除C中的任何字符
a 增加大写和小写字母(a - z) (A - Z)
d 增加数字.
1.25 FINDW (s,w,m,start)查找字符串s中以w为分隔符(默认为空格)从start位置开始第一个出现字符串整体w的位置。
1.26 INDEXC(s,s1,s2,sn) 查找多个字符串s1,s2,s3在s中出现的位置。找不到时返回0。
1.27 VERIFY(s,s1) 查找字符串s中第一个非字符串s1中任何字符的位置,找不到时返回0。
1.28 CALLCATS (s,s1,s2,sn)把字符串S1-Sn去除首尾空格连接后赋值给变量s。
1.29 CALL CATX(d,s,s1,s2,sn)把字符串S1-Sn去除首尾空格通过d连接后赋值给变量s
1.30 LEFT (s) 去除字符串s的左边空格。
1.31 STRIP (s) 返回去掉字符串s首尾空格的结果。
1.32 SCAN (s,n,d,m) 返回以d为分隔符分隔后字符串s的第n个字符串的结果,m为对d的修正项。
1.33 TRANSLATE (s,t1,f1,t2,f2..tn,fn)返回将单个字符f1变为t1,f2变为t2...fn变为tn后的字符串s的结果。
1.34 LENGTH(s)返回去除尾部空格后字符串s的长度
1.35 COUNT(s,s1,m)返回字符串s1在字符串s中出现的次数,m为i时忽略大小写。
1.36 COUNTC(s,s1,m)返回字符串s1中任何单个字符在字符串s中出现的次数之和,m为i时忽略大小写。
1.37 COUNTW(s,d,m)返回以d为分隔符的字符串s中字符串个数,m为对d修正项。
1.38 MISSING(s) 返回s是否为缺失值,是为1不是为0。
1.39 COALESCEC(s1,s2,..,sn)返回字符串s1,s2..sn中第一个不为缺失的字符
1.40 IFC(logical-expression,T,F) 当逻辑语句为真时返回T,假或缺失返回F
1.41 REVERSE(s)返回字符串s反转的结果。
二、日期与时间函数
2.1 MDY(m,d,yr) 生成yr年m月d日的SAS日期值
2.2 YEAR(date) 由SAS日期值date得到年
2.3 MONTH(date) 由SAS日期值date得到月
2.4 DAY(date) 由SAS日期值date得到日
2.5 WEEKDAY(date) 由SAS日期值date得到星期几
2.6 QTR(date) 由SAS日期值date得到季度值
2.7 HMS(h,m,s) 由小时h、分钟m、秒s生成SAS时间值
2.8 DHMS(d,h,m,s) 由SAS日期值d、小时h、分钟m、秒s生成SAS日期时间值
2.9 DATEPART(dt) 求SAS日期时间值dt的日期部分
2.10 INTNX(interval,from,n) 计算从from开始经过n个interval间隔后的SAS日期。
其中interval 可以取‘YEAR‘、‘QTR‘、‘MONTH‘、‘WEEK‘、‘DAY‘等。
例:INTNX(‘MONTH‘, ‘16Dec1997‘d, 3)=1998年3月1日。
2.11 INTCK(interval,from,to) 计算从日期from到日期to中间经过的interval间隔的个数,其中interval取‘MONTH‘等。
例:INTCK(‘YEAR‘, ‘31Dec1996‘d, ‘1Jan1998‘d)=2
函数计算1996年12 月31日到1998年1月1日经过的年间隔的个数,结果得2,尽管这两个日期之间实际只隔1年。
2.12 DATE() /TODAY()/DATETIME()/TIME() 返回现在时间。
2.13 WEEK(date) 由SAS日期值date得到一年当中第几周。
2.14 HOUR(date/time) 由SAS日期值date或时间得到小时。
2.15 TIMEPART(dt) 求SAS日期时间值dt的时间部分
2.16 YRDIF(from,to,‘basis‘) 计算从日期from到日期to中间经过的年份数,basis为计算年份标准,如‘ACTUAL‘/ ‘ACT/365‘ /。
2.17 HOLIDAY(holiday, year) 计算year年某节日的日期,如HOLIDAY(Christmas,2009)。
三、数组函数
3.1 DIM(x) 求数组x第一维的元素的个数。
3.2 DIM k(x) 求数组x第k维的元素的个数。
3.3 LBOUND(x) 求数组x第一维的下界。
3.4 HBOUND(x) 求数组x第一维的上界。
3.5 LBOUND k(x) 求数组x第 k维的下界。
3.6 HBOUND k(x) 求数组x第 k维的上界。
四、数学函数
4.1 ABS(x) 求x的绝对值。
4.2 MAX(x1,x2,…,xn) 求所有自变量中的最大值。
4.3 MIN(x1,x2,…,xn) 求所有自变量中的最小值。
4.4 MOD(x,y) 求x除以y的余数。
4.5 SQRT(x) 求x的平方根。
4.6 ROUND(x,eps) 求x按照eps指定的精度四舍五入后的结果
例:ROUND(5654.5654,0.01) =5654.57
ROUND(5654.5654,10)=5650
4.7 CEIL(x) 求大于等于x的最小整数。
4.8 FLOOR(x) 求小于等于x的最大整数。
4.9 INT(x) 取整数部分(x扔掉小数部分后的结果)。
4.10 FUZZ(x) 当x与其四舍五入整数值相差小于1E-12时取四舍五入。
4.11 LOG(x) 求x的自然对数。
4.12 LOG10(x) 求x的常用对数。
4.13 EXP(x)指数函数。
4.14 SIN(x),COS(x), TAN(x) 求x的正弦、余弦、正切函数。
4.15 ARSIN(y) 计算函数y=sin(x)在区间的反函数,y取[-1,1]间值。
4.16 ARCOS(y) 计算函数y=cos(x)在的反函数,y取[-1,1]间值。
4.17ATAN(y) 计算函数y=tan(x)在的反函数,y取间值。
4.18 SINH(x), COSH(x), TANH(x) 双曲正弦、余弦、正切。
4.19 ERF(x) 误差函数。
4.20 GAMMA(x) 伽玛函数。
4.21 SIGN(x)符号函数。
五、样本描述统计函数
样本统计函数把输入的自变量作为一组样本,计算样本统计量。其调用格式为“函数名(自变量1,自变量2,…,自变量n)”或者“函数名(OF 变量名列表)”。比如SUM是求和函数,如果要求x1,x2,x3的和,可以用SUM(x1,x2,x3),也可以用SUM(OFx1-x3)。这些样本统计函数只对自变量中的非缺失值进行计算,比如求平均时把缺失值不计入内。
5.1 MEAN 均值
5.2 MAX 最大值
5.3 MIN 最小值
5.4 N 非缺失数据的个数
5.5 NMISS 缺失数值的个数。
5.6 SUM 求和
5.7 VAR 方差
5.8 STD 标准差
5.9 STDERR 均值估计的标准误差,用STD/SQRT(N)计算。
5.10 CV 变异系数
5.11 RANGE 极差
5.12 CSS 离差平方和
5.13 USS 平方和
5.14 SKEWNESS 偏度
5.15 KURTOSIS 峰度
5.16 MEDIAN 中位数
5.17 IQR 四分位数的间距
5.18 SMALLEST(n)第n小的数
5.19 LARGEST(n)第n大的数
5.20 PCTL(percentile,x1-xn) percentile%分位数
六、特殊函数
6.1 LAGN(x) 返回该自变量x前n条观测(记录)中该变量的值。
6.2 DIFN(x) 放回该自变量x的值减去前n条观测(记录 )中该变量的值。
6.3 INPUT(x,informat) 将类型为字符的变量x转化为数字型变量(一般情况)或者自定义类型。
6.4 PUT(x,format) 将变量x转化为字符型(一般情况)或自定义输出格式变量。
6.5 INPUTC (x,informat) 将类型为字符的变量x转化为自定义字符格式(可以为动态的自定义格式)。
6.6 INPUTN (x, informat) 将类型为字符的变量x转化为自定义数字型格式(可以为动态的自定义格式)。
6.7 PUTC(x, format) 将字符型变量x转化输出格式或自定义输出格式(可以为动态格式)
6.8 PUTN(x, format) 将数字型变量x转化输出格式或自定义输出格式(可以为动态格式)
自定义动态格式:变量Dummy根据不同情况,输出不同格式:
格式:
value which 1 = ‘mmddyy10.‘
2 = ‘date9.‘;
数据:
whichone Dummy
1 10/21/1980
2 21OCT1980
则Date = inputn(Dummy, put(Which_one,which.)); 会根据whichone的不同转化格式
6.9 CALL MISSING(of x1-xn) 将变量x1-xn转化为缺失值
七、随机数函数
7.1 均匀分布随机数
有两个均匀分布随机数函数:UNIFORM(seed),seed必须是常数,为0,或5位、6位、7位的奇数。RANUNI(seed),seed为小于2**31-1的任意常数。在同一个数据步中对同一个随机数函数的多次调用将得到不同的结果,但不同数据步中从同一种子出发将得到相同的随机数序列。随机数种子如果取0或者负数则种子采用系统日期时间。
7.2 正态分布随机数
有两种:
(1) NORMAL(seed),seed为0,或5位、6位、7位的奇数。
(2) RANNOR(seed),seed为任意数值常数。
7.3 指数分布随机数
RANEXP(seed),seed为任意数值,产生参数为1的指数分布的随机数。
参数为lambda的指数分布可以用RANEXP(seed)/lambda得到。
7.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 )的贝塔分布随机数。
7.5 三角分布随机数
RANTRI(seed,h),seed为任意数值常数,0<h<1。此分布在0到1取值,密度在0到h之间为2x/h,在h到1之间为2(1-x)/(1-h)。
7.6 柯西分布随机数
RANCAU(seed),seed为任意数值常数。产生位置参数为0,尺度参数为1的标准柯西分布随机数。Y=alpha+beta*RANCAU(seed)为位置参数为alpha,尺度参数为beta的一般柯西分布随机数。
7.7 二项分布随机数
RANBIN(seed,n,p)产生参数为(n,p)的二项分布随机数,seed为任意数值。
7.8 泊松分布随机数
RANPOI(seed,lambda)产生参数为lambda>0的泊松分布随机数,seed为任意数值。
7.9 一般离散分布随机数
RANTBL(seed, p1, …, pn)生成取1,2,…,n的概率分别为p1,…,pn的离散分布随机数。
八、宏函数
8.1 CALLSYMPUT(x,v) 再执行data步时将变量v的值赋给宏变量x。
8.2 CALLSYMPUTX(x,v) 再执行data步时将变量v(去除首尾空格)的值赋给宏变量x。
8.3 RESOLVE(x) 解析文本x中的宏变量,如resolve(‘&x‘|| 3) 为解析&x3.。
8.4 CALL EXECUTE(x) 用于在data 步中执行宏语句x。
8.5 SYMGET(x)在data步骤中解析宏变量x。
8.5 %SYSFUNC(x)在宏语句里调用base的函数x。
九、变量信息函数
9.1 VTYPE(x) x为字符型则返回C,x为数字型则返回N。
9.2 VTYPEX(x) x为字符型则返回C,x为数字型则返回N,x可以为一个表达式如x||i。
9.3 VLENGTH(x) 返回变量x的存储长度。
9.4 VNAME(a) 返回变量a的存储名。如:N[*]X2-X3 YZ; VNAME(N[2])=X3
9.5 VLABEL(a) 返回变量a的标签,如果无标签则返回变量名。
9.6 VVALUE(a) 返回变量a的format值。
9.7 VFORMAT(a)返回变量a 的fomat名称。
9.8 VINFORMAT(a)返回变量a的informat名称。
十、分布密度函数、分布函数
作为一个统计计算语言,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.05544),CDF(‘NORMAL‘,1.96)计算标准正态分布在1.96处的分布函数值(0.975)。PMF对连续型分布即PDF。
除了用上述统一的格式调用外,SAS还单独提供了常用的分布的密度、分布函数。
10.1 PROBNORM(x) 标准正态分布函数
10.2 PROBT(x,df<,nc>) 自由度为df的t分布函数。可选参数nc为非中心参数。
10.3 PROBCHI(x,df<,nc>) 自由度为df的卡方分布函数。可选参数nc为非中心参数。
10.4 PROBF(x,ndf,ddf<,nc>) F(ndf,ddf)分布的分布函数。可选参数nc为非中心参数。
10.5 PROBBNML(p,n,m) 设随机变量Y服从二项分布B(n,p),此函数计算P(Y m)。
10.6 POISSON((lambda,n) 参数为lambda的Poisson分布Y n的概率。
10.7 PROBNEGB(p,n,m) 参数为(n,p)的负二项分布Y m的概率。
10.8 PROBHYPR(N,K,n,x<,r>) 超几何分布的分布函数。
10.9 PROBBETA(x,a,b) 参数为(a,b)的Beta分布的分布函数。
10.10 PROBGAM(x,a) 参数为a的Gamma分布的分布函数。
10.11 PROBMC 计算多组均值的多重比较检验的概率值和临界值。
10.12 PROBBNRM(x,y,r) 标准二元正态分布的分布函数,r为相关系数。
十一、分位数函数
分位数函数是概率分布函数的反函数。其自变量在0到1之间取值。分位数函数计算的是分布的左侧分位数。SAS提供了六种常见连续型分布的分位数函数:
11.1 PROBIT(p) 标准正态分布左侧p分位数。结果在-5到5之间。
11.2 TINV(p, df <,nc>) 自由度为df的t分布的左侧p分位数。可选参数nc为非中心参数。
11.3 CINV(p,df<,nc>) 自由度为df的卡方分布的左侧p分位数。可选参数nc为非中心参数。
11.4 FINV(p,ndf,ddf<,nc>) F(ndf,ddf)分布的左侧p分位数。可选参数nc为非中心参数。
11.5 GAMINV(p,a) 参数为a的伽马分布的左侧p分位数。
11.6 BETAINV(p,a,b) 参数为(a,b)的贝塔分布的左侧p分位数。
以上是关于Lesson 3 SAS实用函数的主要内容,如果未能解决你的问题,请参考以下文章