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。

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

四、日期和时间函数 

常用日期和时间函数有:

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

五、分布密度函数、分布函数 

作为一个统计计算语言,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的指数分布的随机数。参数为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的离散分布随机数。

八、样本统计函数 

样本统计函数把输入的自变量作为一组样本,计算样本统计量。其调用格式为“函数名(自变量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 峰度

SAS常用函数的更多相关文章

  1. 7.打开文件、文件读写操作、with方式、文件常用函数

    打开文件: 在python3中,打开文件的函数是: open(file, mode='r', buffering=None, encoding=None, errors=None, newline=N ...

  2. 思迈特软件Smartbi:Excel数据分析常用函数汇总!

    多传统行业的数据分析师只要求掌握Excel即可,会SPSS/SAS是加分项.即使在挖掘满街走,Python不如狗的互联网数据分析界,Excel也是不可替代的. Excel是我们工作中经常使用的一种工具 ...

  3. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

  4. 总结js常用函数和常用技巧(持续更新)

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

  5. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...

  6. PHP常用函数、数组方法

    常用函数:rand(); 生成随机数rand(0,50); 范围随机数时间:time(); 取当前时间戳date("Y-m-d H:i:s"); Y:年 m:月份 d:天 H:当前 ...

  7. Oracle常用函数

    前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...

  8. Thinkcmf:页面常用函数

    Thinkcmf:页面常用函数 全站seo: 文章列表: {$site_seo_title}        <!--SEO标题--> {$site_seo_keywords}   < ...

  9. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

随机推荐

  1. windows文件映射

    0x01 使用文件映射实现共享内存. 用内存映射文件实现进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在进程中保留一段内存区域,把硬盘或页文件上的目标 ...

  2. Linux文件系统命令 cat

    命令名:cat 功能:在当前窗口中查看制定位置的文件的内容. eg: renjg@renjg-HP-Compaq-Pro--MT:~/test$ cat /etc/apache2/ports.conf ...

  3. L275 Climate Change Is Having a Major Impact on Global Health

    Climate Change Is Having a Major Impact on Global Health A devastating heat wave swept across Europe ...

  4. 『翻译』Android USB Host

    USB Host When your Android-powered device is in USB host mode, it acts as the USB host, powers the b ...

  5. 虚拟机提示:无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件

    虚拟机提示:无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件 Win 10 vmware12 无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件. ...

  6. python-局部变量和全局变量

    name = "feifei" def change_name(name): print("before change name:%s" % name) nam ...

  7. python 正则进阶常用方法

    表达式 描述 正则表达式示例 符号 literal 匹配文本字符串的字面值literal foo rel1|rel2 匹配正则表达式rel1或rel2 foo|bar . 匹配任何字符(除了\n之外) ...

  8. 2019-03-08-day007-深浅拷贝

    01 昨日内容回顾 is 两者之间的id是否相同 == 两边的数值是否相等 id 获取该对象的内存地址 代码块: 一个文件,交互式命令行:一行是个一个代码块. 同一代码块下: 字符串的缓存机制,驻留机 ...

  9. awk入门及进阶

    awk是Linux下优良的文本处理工具,有自成一体的编程语法规则,在循环和条件判断语句等方面和C语言很像. 其一般形式是:Pattern1 {ACTIONS; } Pattern2 { ACTIONS ...

  10. Ubuntu16.04 执行sudo apt-get update出现E: Sub-process returned an error code错误

    Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr ...