SAS提供了比一般程序設(shè)計語言多幾倍的標(biāo)準(zhǔn)函數(shù)可以直接用在數(shù)據(jù)步的計算中,其中包括所有語言都有的數(shù)學(xué)函數(shù)、字符串函數(shù),還包括特有的統(tǒng)計分布函數(shù)、分位數(shù)函數(shù)、隨機數(shù)函數(shù)、日期時間函數(shù)、財政金融函數(shù),等等。
這些函數(shù)的調(diào)用方法類似其它語言,比如求x1,x2,x3三個自變量的和可以用函數(shù)SUM(x1,x2,x3) 。另外,SAS還提供了函數(shù)調(diào)用的另一種語法以便于把多個數(shù)據(jù)集變量作為函數(shù)自變量,其格式為“函數(shù)名(OF 變量名列表)”,其中變量名列表可以是任何合法的變量名列表,比如x1 ,x2,x3的和等價地可以用SUM(OF x1 x2 x3)或SUM(OF x1-x3)表示。注意兩種寫法不能混在一起,比如SUM(OF x1,x2,x3)和SUM(x1-x3)都是錯的。
本小節(jié)對重要的函數(shù)加以介紹,其它詳見《SAS軟件:Base SAS軟件使用手冊》(高惠璇等編譯,中國統(tǒng)計出版社出版)。
一、數(shù)學(xué)函數(shù)
ABS(x) 求x的絕對值。
MAX(x1,x2,…,xn) 求所有自變量中的最大一個。
MIN(x1,x2,…,xn) 求所有自變量中的最小一個。
MOD(x,y) 求x除以y的余數(shù)。
SQRT(x) 求x的平方根。
ROUND(x,eps) 求x按照eps指定的精度四舍五入后的結(jié)果,比如ROUND(5654.5654,0.01) 結(jié)果為5654.57,ROUND(5654.5654,10)結(jié)果為5650。
CEIL(x) 求大于等于x的最小整數(shù)。當(dāng)x為整數(shù)時就是x本身,否則為x右邊最近的整數(shù)。
FLOOR(x) 求小于等于x的最大整數(shù)。當(dāng)x為整數(shù)時就是x本身,否則為x左邊最近的整數(shù)。
INT(x) 求x扔掉小數(shù)部分后的結(jié)果。
FUZZ(x) 當(dāng)x與其四舍五入整數(shù)值相差小于1E-12時取四舍五入。
LOG(x) 求x的自然對數(shù)。
LOG10(x) 求x的常用對數(shù)。
EXP(x) 指數(shù)函數(shù) 。
SIN(x), COS(x), TAN(x) 求x的正弦、余弦、正切函數(shù)。
ARSIN(y) 計算函數(shù)y=sin(x)在 區(qū)間的反函數(shù),y取[-1,1]間值。
ARCOS(y) 計算函數(shù)y=cos(x)在 的反函數(shù),y取[-1,1]間值。
ATAN(y) 計算函數(shù)y=tan(x)在 的反函數(shù),y取 間值。
SINH(x), COSH(x), TANH(x) 雙曲正弦、余弦、正切
ERF(x) 誤差函數(shù)
GAMMA(x) 完全 函數(shù)
此外還有符號函數(shù)SIGN, 函數(shù)一階導(dǎo)數(shù)函數(shù)DIGAMMA,二階導(dǎo)數(shù)函數(shù)TRIGAMMA ,誤差函數(shù)余函數(shù)ERFC, 函數(shù)自然對數(shù)LGAMMA,ORDINAL函數(shù),AIRY 函數(shù),DAIRY函數(shù),Bessel函數(shù)JBESSEL,修正的Bessel函數(shù)IBESSEL,等等。
二、數(shù)組函數(shù)
數(shù)組函數(shù)計算數(shù)組的維數(shù)、上下界,有利于寫出可移植的程序。數(shù)組函數(shù)包括:
DIM(x) 求數(shù)組x第一維的元素的個數(shù)(注意當(dāng)下界為1時元素個數(shù)與上界相同,否則元素個數(shù)不一定與上界相同)。
DIM k(x) 求數(shù)組x第k維的元素的個數(shù)。
LBOUND(x) 求數(shù)組x第一維的下界。
HBOUND(x) 求數(shù)組x第一維的上界。
LBOUND k(x) 求數(shù)組x第 k維的下界。
HBOUND k(x) 求數(shù)組x第 k維的上界。
三、字符函數(shù)
較重要的字符函數(shù)有:
TRIM(s) 返回去掉字符串s的尾隨空格的結(jié)果。
UPCASE(s) 把字符串s中所有小寫字母轉(zhuǎn)換為大寫字母后的結(jié)果。
LOWCASE(s) 把字符串s中所有大寫字母轉(zhuǎn)換為小寫字母后的結(jié)果。
INDEX(s,s1) 查找s1在s中出現(xiàn)的位置。找不到時返回0。
RANK(s) 字符s的ASCII碼值。
BYTE(n) 第n個ASCII碼值的對應(yīng)字符。
REPEAT(s,n) 字符表達(dá)式s重復(fù)n次。
SUBSTR(s,p,n) 從字符串s中的第p個字符開始抽取n個字符長的子串
TRANWRD(s,s1,s2) 從字符串s中把所有字符串s1替換成字符串s2后的結(jié)果。
其它字符函數(shù)還有COLLATE,COMPRESS,INDEXC,LEFT,LENGTH,REVERSE,RIGHT,SCAN ,TRANSLATE,VERIFY,COMPBL,DEQUOTE,INDEXW,QUOTE,SOUNDEX,TRIMN,INDEXW。
四、日期和時間函數(shù)
常用日期和時間函數(shù)有:
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開始經(jīng)過n個in間隔后的SAS日期。其中interval 可以取'YEAR'、'QTR'、'MONTH'、'WEEK'、'DAY'等。比如,INTNX('MONTH', '16Dec1997'd, 3)結(jié)果為1998年3月1日。注意它總是返回一個周期的開始值。
INTCK(interval,from,to) 計算從日期from到日期to中間經(jīng)過的interval間隔的個數(shù),其中interval取'MONTH'等。比如,INTCK('YEAR', '31Dec1996'd, '1Jan1998'd)計算1996年12 月31日到1998年1月1日經(jīng)過的年間隔的個數(shù),結(jié)果得2,盡管這兩個日期之間實際只隔1年。
其它日期和時間函數(shù)還有DATE、TODAY、DATETIME、DATEJUL、JULDATE、HOUR、MINUTE、SECOND 、TIME、TIMEPART等。詳見《SAS系統(tǒng)-Base SAS軟件使用手冊》、《SAS系統(tǒng)-SAS/ETS軟件使用手冊》。
五、分布密度函數(shù)、分布函數(shù)
作為一個統(tǒng)計計算語言,SAS提供了多種概率分布的有關(guān)函數(shù)。分布密度、概率、累積分布函數(shù)等可以通過幾種統(tǒng)一的格式調(diào)用,格式為
分布函數(shù)值 = CDF(' 分布', x <, 參數(shù)表>);
密度值 = PDF(' 分布', x <, 參數(shù)表>);
概率值 = PMF(' 分布', x <, 參數(shù)表>);
對數(shù)密度值 = LOGPDF(' 分布', x <, 參數(shù)表>);
對數(shù)概率值 = LOGPMF(' 分布', x <, 參數(shù)表>);
CDF計算由'分布'指定的分布的分布函數(shù), PDF計算分布密度函數(shù)值,PMF計算離散分布的分布概率,LOGPDF為PDF的自然對數(shù),LOGPMF為PMF的自然對數(shù)。函數(shù)在自變量 x處計算,<, 參數(shù)表>表示可選的參數(shù)表。
分布類型取值可以為: 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)計算標(biāo)準(zhǔn)正態(tài)分布在1.96處的密度值(0.05844),CDF('NORMAL', 1.96)計算標(biāo)準(zhǔn)正態(tài)分布在1.96處的分布函數(shù)值(0.975)。PMF對連續(xù)型分布即PDF。
除了用上述統(tǒng)一的格式調(diào)用外,SAS還單獨提供了常用的分布的密度、分布函數(shù)。
PROBNORM(x) 標(biāo)準(zhǔn)正態(tài)分布函數(shù)
PROBT(x,df<,nc>) 自由度為df的t分布函數(shù)??蛇x參數(shù)nc為非中心參數(shù)。
PROBCHI(x,df<,nc>) 自由度為df的卡方分布函數(shù)??蛇x參數(shù)nc為非中心參數(shù)。
PROBF(x,ndf,ddf<,nc>) F(ndf,ddf)分布的分布函數(shù)??蛇x參數(shù)nc為非中心參數(shù)。
PROBBNML(p,n,m) 設(shè)隨機變量Y服從二項分布B(n,p),此函數(shù)計算P(Y m)。
POISSON((lambda,n) 參數(shù)為lambda的Poisson分布Y n的概率。
PROBNEGB(p,n,m) 參數(shù)為(n,p)的負(fù)二項分布Y m的概率。
PROBHYPR(N,K,n,x<,r>) 超幾何分布的分布函數(shù)。設(shè)N個產(chǎn)品中有K個不合格品,抽取n個樣品,其中不合格品數(shù)小于等于x的概率為此函數(shù)值??蛇x參數(shù)r是不勻率,缺省為1 ,r代表抽到不合格品的概率是抽到合格品概率的多少倍。
PROBBETA(x,a,b) 參數(shù)為(a,b)的Beta分布的分布函數(shù)。
PROBGAM(x,a) 參數(shù)為a的Gamma分布的分布函數(shù)。
PROBMC 計算多組均值的多重比較檢驗的概率值和臨界值。
PROBBNRM(x,y,r) 標(biāo)準(zhǔn)二元正態(tài)分布的分布函數(shù),r為相關(guān)系數(shù)。
六、分位數(shù)函數(shù)
分位數(shù)函數(shù)是概率分布函數(shù)的反函數(shù)。其自變量在0到1之間取值。分位數(shù)函數(shù)計算的是分布的左側(cè)分位數(shù)。SAS提供了六種常見連續(xù)型分布的分位數(shù)函數(shù)。
PROBIT(p) 標(biāo)準(zhǔn)正態(tài)分布左側(cè)p分位數(shù)。結(jié)果在-5到5之間。
TINV(p, df <,nc>) 自由度為df的t分布的左側(cè)p分位數(shù)??蛇x參數(shù)nc為非中心參數(shù)。
CINV(p,df<,nc>) 自由度為df的卡方分布的左側(cè)p分位數(shù)??蛇x參數(shù)nc為非中心參數(shù)。
FINV(p,ndf,ddf<,nc>) F(ndf,ddf)分布的左側(cè)p分位數(shù)??蛇x參數(shù)nc為非中心參數(shù)。
GAMINV(p,a) 參數(shù)為a的伽馬分布的左側(cè)p分位數(shù)。
BETAINV(p,a,b) 參數(shù)為(a,b)的貝塔分布的左側(cè)p分位數(shù)。
七、隨機數(shù)函數(shù)
SAS可以用來進行隨機模擬。它提供了常見分布的偽隨機數(shù)生成函數(shù)。
1.均勻分布隨機數(shù)
有兩個均勻分布隨機數(shù)函數(shù):UNIFORM(seed),seed必須是常數(shù),為0,或5位、6位、7位的奇數(shù)。RANUNI(seed),seed為小于2**31-1的任意常數(shù)。在同一個數(shù)據(jù)步中對同一個隨機數(shù)函數(shù)的多次調(diào)用將得到不同的結(jié)果,但不同數(shù)據(jù)步中從同一種子出發(fā)將得到相同的隨機數(shù)序列。隨機數(shù)種子如果取0或者負(fù)數(shù)則種子采用系統(tǒng)日期時間。
2.正態(tài)分布隨機數(shù)
有兩種,NORMAL(seed),seed為0,或5位、6位、7位的奇數(shù)。RANNOR(seed),seed為任意數(shù)值常數(shù)。
3.指數(shù)分布隨機數(shù)
RANEXP(seed),seed為任意數(shù)值,產(chǎn)生參數(shù)為1的指數(shù)分布的隨機數(shù)。參數(shù)為lambda的指數(shù)分布可以用RANEXP(seed)/lambda得到。
另外若Y=alpha-beta*LOG(RANEXP(seed)),則Y為位置參數(shù)為alpha,尺度參數(shù)為beta的極值分布。若Y=FLOOR(-RANEXP(seed)/LOG(p)),那么Y是具有參數(shù)p的幾何分布變量。
4.伽馬分布隨機數(shù)
RANGAM(seed, alpha),seed為任意數(shù)值常數(shù),alpha>0,得到參數(shù)為alpha的伽馬分布。設(shè)X=RANGAM(seed, alpha),則Y=beta*X是形狀參數(shù)為alpha,尺度參數(shù)為beta的GAMMA分布隨機數(shù)。如果alpha是整數(shù),則Y=2*X是自由度為2*alpha的卡方分布隨機數(shù)。
如果alpha是正整數(shù),則Y=beta*X是Erlang分布隨機數(shù),為alpha個獨立的均值為beta的指數(shù)分布變量的和。
如果Y1=RANGAM(seed,alpha),Y2=RANGAM(seed,beta),在Y=Y1/(Y1+Y2)是參數(shù)為(alpha,beta )的貝塔分布隨機數(shù)。
5.三角分布隨機數(shù)
RANTRI(seed,h),seed為任意數(shù)值常數(shù),0<h<1。此分布在0到1取值,密度在0到h 之間為2x/h,在h到1之間為2(1-x)/(1-h)。
6.柯西分布隨機數(shù)
RANCAU(seed),seed為任意數(shù)值常數(shù)。產(chǎn)生位置參數(shù)為0,尺度參數(shù)為1的標(biāo)準(zhǔn)柯西分布隨機數(shù)。Y=alpha+beta*RANCAU(seed)為位置參數(shù)為alpha,尺度參數(shù)為beta的一般柯西分布隨機數(shù)。
7.二項分布隨機數(shù)
RANBIN(seed,n,p)產(chǎn)生參數(shù)為(n,p)的二項分布隨機數(shù),seed為任意數(shù)值。
8.泊松分布隨機數(shù)
RANPOI(seed,lambda)產(chǎn)生參數(shù)為lambda>0的泊松分布隨機數(shù),seed為任意數(shù)值。
9.一般離散分布隨機數(shù)
RANTBL(seed, p1, …, pn)生成取1,2,…,n的概率分別為p1,…,pn的離散分布隨機數(shù)。
八、樣本統(tǒng)計函數(shù)
樣本統(tǒng)計函數(shù)把輸入的自變量作為一組樣本,計算樣本統(tǒng)計量。其調(diào)用格式為“函數(shù)名(自變量1,自變量2,…,自變量n)”或者“函數(shù)名(OF 變量名列表)”。比如SUM是求和函數(shù),如果要求x1,x2,x3的和,可以用SUM(x1,x2,x3),也可以用SUM(OF x1-x3)。這些樣本統(tǒng)計函數(shù)只對自變量中的非缺失值進行計算,比如求平均時把缺失值不計入內(nèi)。
各樣本統(tǒng)計函數(shù)為:
MEAN 均值
MAX 最大值
MIN 最小值
N 非缺失數(shù)據(jù)的個數(shù)
NMISS 缺失數(shù)值的個數(shù)。
SUM 求和
VAR 方差
STD 標(biāo)準(zhǔn)差
STDERR 均值估計的標(biāo)準(zhǔn)誤差,用STD/SQRT(N)計算。
CV 變異系數(shù)
RANGE 極差
CSS 離差平方和
USS 平方和
SKEWNESS 偏度
KURTOSIS 峰度
注意:數(shù)據(jù)集的存儲一般是每行為一個個體的觀測值,每列是個體的一個屬性(變量),所以統(tǒng)計一般應(yīng)該對列進行,而不是象這里對行進行,把各變量作為一個樣本的各個觀測處理。這里提供的函數(shù)主要用于進行一些自編程的計算。