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時元素個數與上界相同,否則元素個數不一定與上界相同)。 

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 峰度 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM