SAS常用函數


本文根據網絡資源和書籍結合自己的經驗對SAS的常用函數進行了整理。主要內容包括:

1. 字符函數

2. 日期和時間函數

3. 數組函數

4. 數學函數

5. 樣本描述統計函數

6. 特殊函數

7. 隨機數函數

8. 宏函數

9. 變量信息函數

10.分布密度函數、分布函數

11.分位數函數  

 

一、字符函數 

1.1 TRIM(s) 返回去掉字符串s的尾隨空格的結果。

1.2 UPCASE(s) 把字符串s中所有小寫字母轉換為大寫字母后的結果。

1.3 LOWCASE(s) 把字符串s中所有大寫字母轉換為小寫字母后的結果。

1.4 INDEX(s,s1) 查找s1在s中出現的位置。找不到時返回0。

1.5 RANK(s) 字符s的ASCII碼值

1.6 BYTE(n) 第n個ASCII碼值的對應字符

1.7 REPEAT(s,n) 字符表達式s重復n

1.8 SUBSTR(s,p,n) 從字符串s中的第p個字符開始抽取n個字符長的子串

1.9 TRANWRD(s,s1,s2) 從字符串s中把所有字符串s1替換成字符串s2后的結果。

1.10 PROPCASE(s) 把字符串s的第一個字母大寫

1.11 CATX(d,s1,s2) 把字符串s1和字符串s2通過d(如'-')連接返回結果。

1.12 COMPBL(s) 把字符串s中的不同長度空格變為長度為1的空格返回結果。

1.13 COMPRESS(s,c,m)  將字符串c(默認為空格)從字符串中移除,m為對d的添加項如下:

     d 增加數字到初始字符里(chars)。

     f 增加下划線和字母 (A - Z, a - z) 到初始字符里(chars)。

     g 增加圖形字符到初始字符里(chars)。

     k 不移除初始字符(chars)而是返回這些字符。

     l  增加小寫字母(a - z)。

     n 增加數字、下划線和字母(A - Z, a - z)。

     p 增加標點符號。

     s 增加空格,包括空格,水平制表符,垂直制表符,回車符,換行符和換頁符

     u 增加大寫字母(A- Z)。       

    a增加(A- Z, a - z)到初始字符里(chars)。

1.14 ANYALNUM (s,start) 查找字符串s中從start位置開始第一個數字或者字母的位置

1.15 ANYALPHA (s,start) 查找字符串s中從start位置開始第一個字母的位置

1.16 ANYDIGIT (s,start) 查找字符串s中從start位置開始第一個數字的位置

1.17 ANYPUNCT (s,start) 查找字符串s中從start位置開始第一個特殊標點字符的位置

1.18 ANYSPACE(s,start)查找字符串s中從start位置開始第一個空格的位置

1.19 ANYUPPER (s,start) 查找字符串s中從start位置開始第一個大寫字母的位置

1.20 NOTALNUM(s,start)查找字符串s中從start位置開始第一個非數字和字母的位置

1.21 NOTALPHA (s,start) 查找字符串s中從start位置開始第一個非字母的位置

1.22 NOTUPPER (s,start) 查找字符串s中從start位置開始第一個非大寫字母的位置

1.23 FIND(s,c,m,start)查找字符串s中從start開始字符串c的第一次出現的位置,m為i時忽略大小寫。

1.24 FINDC(s,c,m,start)查找字符串s中從start開始字符串c中任何一個字符第一次出現得的位置,m為對d的添加項如下:

        i 忽略大小寫

        t 忽略字符串兩邊首尾的空格

        k 查找除C中的任何字符

        a 增加大寫和小寫字母(a - z) (A - Z)

        d 增加數字.

1.25 FINDW (s,w,m,start)查找字符串s中以w為分隔符(默認為空格)從start位置開始第一個出現字符串整體w的位置

1.26 INDEXC(s,s1,s2,sn) 查找多個字符串s1,s2,s3在s中出現的位置。找不到時返回0。

1.27 VERIFY(s,s1) 查找字符串s中第一個非字符串s1中任何字符的位置,找不到時返回0。

1.28 CALLCATS (s,s1,s2,sn)把字符串S1-Sn去除首尾空格連接賦值給變量s。

1.29 CALL CATX(d,s,s1,s2,sn)把字符串S1-Sn去除首尾空格通過d連接賦值給變量s

1.30 LEFT (s) 去除字符串s的左邊空格。

1.31 STRIP (s) 返回去掉字符串s首尾空格的結果。

1.32 SCAN (s,n,d,m) 返回以d為分隔符分隔后字符串s的n個字符串的結果,m為對d的修正項。

1.33 TRANSLATE (s,t1,f1,t2,f2..tn,fn)返回將單個字符f1變為t1,f2變為t2...fn變為tn后的字符串s的結果。

1.34 LENGTH(s)返回去除尾部空格后字符串s的長度

1.35 COUNT(s,s1,m)返回字符串s1在字符串s中出現的次數,m為i時忽略大小寫。

1.36 COUNTC(s,s1,m)返回字符串s1中任何單個字符在字符串s中出現的次數之和,m為i時忽略大小寫。

1.37 COUNTW(s,d,m)返回以d為分隔符的字符串s中字符串個數,m為對d修正項。

1.38 MISSING(s)  返回s是否為缺失值,是為1不是為0。

1.39 COALESCEC(s1,s2,..,sn)返回字符串s1,s2..sn中第一個不為缺失的字符

1.40 IFC(logical-expression,T,F) 當邏輯語句為真時返回T,假或缺失返回F

1.41 REVERSE(s)返回字符串s反轉的結果

 

二、日期與時間函數 

2.1 MDY(m,d,yr) 生成yr年m月d日的SAS日期值

2.2 YEAR(date) 由SAS日期值date得到年

2.3 MONTH(date) 由SAS日期值date得到月

2.4 DAY(date) 由SAS日期值date得到日

2.5 WEEKDAY(date) 由SAS日期值date得到星期幾

2.6 QTR(date) 由SAS日期值date得到季度值

2.7 HMS(h,m,s) 由小時h、分鍾m、秒s生成SAS時間值

2.8 DHMS(d,h,m,s) 由SAS日期值d、小時h、分鍾m、秒s生成SAS日期時間值

2.9 DATEPART(dt) 求SAS日期時間值dt的日期部分

2.10 INTNX(interval,from,n) 計算從from開始經過n個interval間隔后的SAS日期。

       其中interval 可以取'YEAR'、'QTR'、'MONTH'、'WEEK'、'DAY'等。

       例:INTNX('MONTH', '16Dec1997'd, 3)=1998年3月1日。

2.11 INTCK(interval,from,to) 計算從日期from到日期to中間經過的interval間隔的個數,其中interval取'MONTH'等。

       例:INTCK('YEAR', '31Dec1996'd, '1Jan1998'd)=2

函數計算1996年12 月31日到1998年1月1日經過的年間隔的個數,結果得2,盡管這兩個日期之間實際只隔1年。

2.12 DATE() /TODAY()/DATETIME()/TIME() 返回現在時間。

2.13 WEEK(date) 由SAS日期值date得到一年當中第幾周。

2.14 HOUR(date/time) 由SAS日期值date或時間得到小時。

2.15 TIMEPART(dt) 求SAS日期時間值dt的時間部分

2.16 YRDIF(from,to,'basis') 計算從日期from到日期to中間經過的年份數,basis為計算年份標准,如'ACTUAL'/ 'ACT/365' /。

2.17 HOLIDAY(holiday, year) 計算year年某節日的日期,如HOLIDAY(Christmas,2009)。

 

三、數組函數 

 

3.1 DIM(x) 求數組x第一維的元素的個數。

3.2 DIM k(x) 求數組x第k維的元素的個數。

3.3 LBOUND(x) 求數組x第一維的下界。

3.4 HBOUND(x) 求數組x第一維的上界。

3.5 LBOUND k(x) 求數組x第 k維的下界。

3.6 HBOUND k(x) 求數組x第 k維的上界。

四、數學函數

 4.1 ABS(x) 求x的絕對值

4.2 MAX(x1,x2,…,xn) 求所有自變量中的最大值

4.3 MIN(x1,x2,…,xn) 求所有自變量中的最小值

4.4 MOD(x,y) 求x除以y的余數

4.5 SQRT(x) 求x的平方根

4.6 ROUND(x,eps) 求x按照eps指定的精度四舍五入后的結果

     例:ROUND(5654.5654,0.01) =5654.57

           ROUND(5654.5654,10)=5650 
4.7 CEIL(x) 求大於等於x的最小整數。 

4.8 FLOOR(x) 求小於等於x的最大整數

4.9 INT(x) 取整數部分(x扔掉小數部分后的結果)。

4.10 FUZZ(x) 當x與其四舍五入整數值相差小於1E-12時取四舍五入。

4.11 LOG(x) 求x的自然對數

4.12 LOG10(x) 求x的常用對數

4.13 EXP(x)指數函數

4.14 SIN(x),COS(x), TAN(x) 求x的正弦、余弦、正切函數

4.15 ARSIN(y) 計算函數y=sin(x)在區間的反函數,y取[-1,1]間值。

4.16 ARCOS(y) 計算函數y=cos(x)在的反函數,y取[-1,1]間值。

4.17ATAN(y) 計算函數y=tan(x)在的反函數,y取間值。

4.18 SINH(x), COSH(x), TANH(x) 雙曲正弦、余弦、正切

4.19 ERF(x) 誤差函數。 

4.20 GAMMA(x) 伽瑪函數

4.21 SIGN(x)符號函數

 

五、樣本描述統計函數

     樣本統計函數把輸入的自變量作為一組樣本,計算樣本統計量。其調用格式為“函數名(自變量1,自變量2,…,自變量n)”或者“函數名(OF 變量名列表)”。比如SUM是求和函數,如果要求x1,x2,x3的和,可以用SUM(x1,x2,x3),也可以用SUM(OFx1-x3)。這些樣本統計函數只對自變量中的非缺失值進行計算,比如求平均時把缺失值不計入內。

5.1 MEAN 均值

5.2 MAX 最大值

5.3 MIN 最小值

5.4 N 非缺失數據的個數

5.5 NMISS 缺失數值的個數。

5.6 SUM 求和

5.7 VAR 方差

5.8 STD 標准差

5.9 STDERR 均值估計的標准誤差,用STD/SQRT(N)計算。

5.10 CV 變異系數

5.11 RANGE 極差

5.12 CSS 離差平方和

5.13 USS 平方和

5.14 SKEWNESS 偏度

5.15 KURTOSIS 峰度

5.16 MEDIAN 中位數

5.17 IQR 四分位數的間距

5.18 SMALLEST(n)第n小的數

5.19 LARGEST(n)第n大的數

5.20 PCTL(percentile,x1-xn)  percentile%分位數

 

 

六、特殊函數

 

6.1 LAGN(x) 返回該自變量x前n條觀測(記錄)中該變量的值。

6.2 DIFN(x) 放回該自變量x的值減去前n條觀測(記錄 )中該變量的值。

6.3 INPUT(x,informat)  將類型為字符的變量x轉化為數字型變量(一般情況)或者自定義類型。

6.4 PUT(x,format)  將變量x轉化為字符型(一般情況)或自定義輸出格式變量。

6.5 INPUTC (x,informat)  將類型為字符的變量x轉化為自定義字符格式(可以為動態的自定義格式)。

6.6 INPUTN (x, informat)  將類型為字符的變量x轉化為自定義數字型格式(可以為動態的自定義格式)。

6.7 PUTC(x, format)   將字符型變量x轉化輸出格式或自定義輸出格式(可以為動態格式)

6.8 PUTN(x, format)   將數字型變量x轉化輸出格式或自定義輸出格式(可以為動態格式)

 

自定義動態格式:變量Dummy根據不同情況,輸出不同格式:

格式:

value which 1 = 'mmddyy10.'

          2 = 'date9.';

數據:

whichone   Dummy

1 10/21/1980

2 21OCT1980

則Date = inputn(Dummy, put(Which_one,which.)); 會根據whichone的不同轉化格式

 

6.9 CALL MISSING(of x1-xn) 將變量x1-xn轉化為缺失值

 

七、隨機數函數 

 

7.1 均勻分布隨機數
    有兩個均勻分布隨機數函數:UNIFORM(seed),seed必須是常數,為0,或5位、6位、7位的奇數。RANUNI(seed),seed為小於2**31-1的任意常數。在同一個數據步中對同一個隨機數函數的多次調用將得到不同的結果,但不同數據步中從同一種子出發將得到相同的隨機數序列。隨機數種子如果取0或者負數則種子采用系統日期時間。

7.2 正態分布隨機數
有兩種:

(1) NORMAL(seed),seed為0,或5位、6位、7位的奇數。

(2) RANNOR(seed),seed為任意數值常數。

7.3 指數分布隨機數
    RANEXP(seed),seed為任意數值,產生參數為1的指數分布的隨機數。

     參數為lambda的指數分布可以用RANEXP(seed)/lambda得到。

7.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 )的貝塔分布隨機數。

7.5 三角分布隨機數
    RANTRI(seed,h),seed為任意數值常數,0<h<1。此分布在0到1取值,密度在0到h之間為2x/h,在h到1之間為2(1-x)/(1-h)。

7.6 柯西分布隨機數
    RANCAU(seed),seed為任意數值常數。產生位置參數為0,尺度參數為1的標准柯西分布隨機數。Y=alpha+beta*RANCAU(seed)為位置參數為alpha,尺度參數為beta的一般柯西分布隨機數。

7.7 二項分布隨機數
    RANBIN(seed,n,p)產生參數為(n,p)的二項分布隨機數,seed為任意數值。

7.8 泊松分布隨機數
    RANPOI(seed,lambda)產生參數為lambda>0的泊松分布隨機數,seed為任意數值。

7.9 一般離散分布隨機數
    RANTBL(seed, p1, …, pn)生成取1,2,…,n的概率分別為p1,…,pn的離散分布隨機數。

 

 

 

八、宏函數 

 

8.1 CALLSYMPUT(x,v) 再執行data步時將變量v的值賦給宏變量x。

8.2 CALLSYMPUTX(x,v) 再執行data步時將變量v(去除首尾空格)的值賦給宏變量x。

8.3 RESOLVE(x) 解析文本x中的宏變量,如resolve('&x'|| 3) 為解析&x3.。

8.4 CALL EXECUTE(x) 用於在data 步中執行宏語句x。

8.5 SYMGET(x)在data步驟中解析宏變量x。

8.5 %SYSFUNC(x)在宏語句里調用base的函數x。

 

九、變量信息函數

  

9.1 VTYPE(x)  x為字符型則返回C,x為數字型則返回N。

9.2 VTYPEX(x)  x為字符型則返回C,x為數字型則返回N,x可以為一個表達式如x||i。

9.3 VLENGTH(x)   返回變量x的存儲長度

9.4 VNAME(a)   返回變量a的存儲名。如:N[*]X2-X3 YZ;  VNAME(N[2])=X3

9.5 VLABEL(a)   返回變量a的標簽,如果無標簽則返回變量名。

9.6 VVALUE(a) 返回變量a的format值。

9.7 VFORMAT(a)返回變量a 的fomat名稱。

9.8 VINFORMAT(a)返回變量a的informat名稱。

 

十、分布密度函數、分布函數  


作為一個統計計算語言,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.05544),CDF('NORMAL',1.96)計算標准正態分布在1.96處的分布函數值(0.975)。PMF對連續型分布即PDF。

除了用上述統一的格式調用外,SAS還單獨提供了常用的分布的密度、分布函數。

10.1 PROBNORM(x) 標准正態分布函數

10.2 PROBT(x,df<,nc>) 自由度為df的t分布函數。可選參數nc為非中心參數。

10.3 PROBCHI(x,df<,nc>) 自由度為df的卡方分布函數。可選參數nc為非中心參數。

10.4 PROBF(x,ndf,ddf<,nc>) F(ndf,ddf)分布的分布函數。可選參數nc為非中心參數。

10.5 PROBBNML(p,n,m) 設隨機變量Y服從二項分布B(n,p),此函數計算P(Y m)。

10.6 POISSON((lambda,n) 參數為lambda的Poisson分布Y n的概率。

10.7 PROBNEGB(p,n,m) 參數為(n,p)的負二項分布Y m的概率。

10.8 PROBHYPR(N,K,n,x<,r>) 超幾何分布的分布函數。

10.9 PROBBETA(x,a,b) 參數為(a,b)的Beta分布的分布函數。

10.10 PROBGAM(x,a) 參數為a的Gamma分布的分布函數。

10.11 PROBMC 計算多組均值的多重比較檢驗的概率值和臨界值。

10.12 PROBBNRM(x,y,r) 標准二元正態分布的分布函數,r為相關系數。

十一、分位數函數

分位數函數是概率分布函數的反函數。其自變量在0到1之間取值。分位數函數計算的是分布的左側分位數。SAS提供了六種常見連續型分布的分位數函數:

11.1 PROBIT(p) 標准正態分布左側p分位數。結果在-5到5之間。

11.2 TINV(p, df <,nc>) 自由度為df的t分布的左側p分位數。可選參數nc為非中心參數。

11.3 CINV(p,df<,nc>) 自由度為df的卡方分布的左側p分位數。可選參數nc為非中心參數。

11.4 FINV(p,ndf,ddf<,nc>) F(ndf,ddf)分布的左側p分位數。可選參數nc為非中心參數。

11.5 GAMINV(p,a) 參數為a的伽馬分布的左側p分位數。

11.6 BETAINV(p,a,b) 參數為(a,b)的貝塔分布的左側p分位數。


免責聲明!

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



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