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