SAS經常使用函數數組
1、數學函數 函數
ABS(x) 求x的絕對值。 spa
MAX(x1,x2,…,xn) 求全部自變量中的最大一個。 ip
MIN(x1,x2,…,xn) 求全部自變量中的最小一個。 ci
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右邊最近的整數。 table
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,等等。
2、數組函數
數組函數計算數組的維數、上下界,有利於寫出可移植的程序。數組函數包括:
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維的上界。
3、字符函數
較重要的字符函數有:
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
4、日期和時間函數
經常使用日期和時間函數有:
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軟件使用手冊》。
5、分佈密度函數、分佈函數
做爲一個統計計算語言,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爲相關係數。
6、分位數函數
分位數函數是機率分佈函數的反函數。其自變量在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分位數。
7、隨機數函數
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的離散分佈隨機數。
8、樣本統計函數
樣本統計函數把輸入的自變量做爲一組樣本,計算樣本統計量。其調用格式爲「函數名(自變量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 峯度