SAS常用函数大全.docx
《SAS常用函数大全.docx》由会员分享,可在线阅读,更多相关《SAS常用函数大全.docx(7页珍藏版)》请在冰豆网上搜索。
SAS常用函数大全
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时元素个数与上界相同,否则元素个数不一定与上界相同)。
DIMk(x)求数组x第k维的元素的个数。
LBOUND(x)求数组x第一维的下界。
HBOUND(x)求数组x第一维的上界。
LBOUNDk(x)求数组x第k维的下界。
HBOUNDk(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日期值
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系统,BaseSAS软件使用手册》、《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,andWEIBULL。
可以只写前四个字母。
例如,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(Ym)。
POISSON((lambda,n)参数为lambda的Poisson分布Yn的概率。
PROBNEGB(p,n,m)参数为(n,p)的负二项分布Ym的概率。
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此分布在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(OFx1-x3)。
这些样本统计函数只对自变量中的非缺失值进行计算,比如求平均时把缺失值不计入内。
各样本统计函数为:
MEAN均值
MAX最大值
MIN最小值
N非缺失数据的个数
NMISS缺失数值的个数。
SUM求和
VAR方差
STD标准差
STDERR均值估计的标准误差,用STD/SQRT(N)计算。
CV变异系数
RANGE极差
CSS离差平方和
USS平方和
SKEWNESS偏度
KURTOSIS峰度
注意:
数据集的存储一般是每行为一个个体的观测值,每列是个体的一个属性(变量),所以统计一般应该对列进行,而不是象这里对行进行,把各变量作为一个样本的各个观测处理。
这里提供的函数主要用于进行一些自编程的计算。
九、SAS/IML矩阵功能简介
SAS/IML是SAS提供的一个可以进行矩阵运算编程的工具,详细使用请参见有关资料或系统帮助(Help|ExtendedHelp|SASSystemHelp:
MainMenu|Help
forSASProducts|SAS/IML)。
它可以用来进行交互的矩阵运算,也可以编好一个程序再一起运行。
程序可以使用分支、循环、模块化子程序等控制结构。
数据步中的函数大都能在SAS/IML中使用,SAS/IML也提供了一些特有的函数。
SAS/IML的一个方便之处是它可以直接读取SAS的数据集并把结果写成SAS数据集,它也有存取外部文件的功能。
要交互运行SAS/IML,只要在程序窗口输入
prociml;
resetprint;
提交此程序,就可以进入交互的SAS/IML运算状态。
退出用QUIT语句。
SAS/IML中可以使用标量、行向量、列变量和矩阵,可以使用字符型数据。
变量取名规则遵循SAS语言的统一规定,变量可以存储标量、向量和矩阵。
赋值用等号。
例如:
sc=15.25;
vh={12};
vh1=5:
9;
vv={3,4};
mat1={123,
456};
mat2={"Li""Ming",
"Zhang""Chong"};
我们注意赋值语句是一个SAS语句,它以分号结尾。
上面定义了标量sc,行向量vh和vh1,列向量vv,两行两列的矩阵mat1,字符型矩阵mat2。
由上可见,
写矩阵常量时,行的元素之间以空格分隔,行之间以逗号分割。
可以用“开始:
结尾”的写法生成一个等差数列行向量。
矩阵之间可以用<、,等符号进行元素两两间的比较。
要得到一个标量的结果,可以用ALL()函数表示自变量的各元素均为真(非零),用ANY()函数表示自变量的元素中至少一个为真。
可以用&、|、^连接两个逻辑型矩阵(元素间的与、或、非)。
用||表示矩阵左右连接,用//表示矩阵上下连接。
x`表示x的转置。
SAS/IML中可以进行通常的矩阵加减乘(,、,、*)运算,也可以进行对应元素之间的乘除(,、/)运算。
矩阵加减必须两个矩阵大小完全相等,或者其中一个是标量。
矩阵乘法要求第一矩阵的列数等于第二矩阵的行数,或其中一个是标量。
矩阵元素之间的乘除运算是对应元素进行乘除,当两个矩阵大小完全相同时可以进行运算,其中有一个是标量时可以进行运算,另外,如果其中有一个是行(列)向量而其长度与另一个矩阵的列数(行数)相同也可以进行运算。
矩阵逆要用INV()函数运算。
为了读入一个数据集,先打开数据集,用如
USEsasuser.c9501;
然后用READALLVAR{变量列表}的格式读入数据集的各变量值,例如:
READALLVAR{namemathchinese};printnamemathchinese;
这时三个变量都可以作为列向量来使用。