2.SAS基礎-表達式及函數(shù)簡介_第1頁
2.SAS基礎-表達式及函數(shù)簡介_第2頁
2.SAS基礎-表達式及函數(shù)簡介_第3頁
2.SAS基礎-表達式及函數(shù)簡介_第4頁
2.SAS基礎-表達式及函數(shù)簡介_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

SAS表達式及函數(shù)簡介SAS表達式

SAS表達式是由一系列算符和運算對象形成的一個指令集,它被執(zhí)行后產(chǎn)生一個目標值。

運算對象是SAS變量和SAS常數(shù);算符是特殊的運算符、函數(shù)和括號。表達式分為簡單表達式和復合表達式。下列式子都是表達式。X+13LOG(X)LOG10(X)P/A*100AGE<1001-EXP(N/(N-1))A=B=CSTATE=‘CA’

在DATA步中,為了對變量進行變換,建立新變量、條件處理、計算新值及指定新值,都需要使用SAS表達式。一、SAS常數(shù)

SAS常數(shù)用來表示固定的值,它或者是一個數(shù)字,或者是用引號引起來的字符串、或者是其它特殊記號。SAS使用的常數(shù)有五種類型:數(shù)值常量、字符常量、日期、時間和日期時間常量、十六進制數(shù)值常量、十六進制字符常量。我們主要介紹數(shù)值常量、字符常量和日期常量。1.數(shù)值常量:一個數(shù)值常量就是出現(xiàn)在SAS語句里的數(shù)字。數(shù)值常量可以包括小數(shù)點,負號和E記號。例如:1-51.231.2E230.10.5E-10。用E表示法時,如2E4,它表示,或者20000。

SAS系統(tǒng)中,數(shù)值缺失值用小數(shù)點來(.)表示。2.字符常量字符常量是由(單)引號括起來的字符串.例如,在下面的語句中:

IFname=‘TOM’

THENDO;‘TOM’就是一個字符常量。如果字符常量含有引號,則用兩個連續(xù)的單引號來處理。例如,字符值為TOM’S時,輸入:

name=’TOM’’S’

缺失的字符常量值為空字符,表示為’’或””(兩個連續(xù)的單引號或雙引號)。注意,下面語句中TOM不是字符常量,而是按變量處理!!

IFname=TOMTHENScore=85;3.日期、時間常量:日期\時間常量是將日期\時間由(單)引號括起來,后面加上d或t或dt而形成的。例如:

日期常量:‘15may2008’d

時間常量:‘16:45:01’t

日期時間常量:‘15may2008:16:45:01’dt注意:日期格式為:DDMMMYY或DDMMMYYYY即,月份需要用三個英文字母表示二SAS變量:描述給定特征的數(shù)值集合的指標稱為變量。SAS變量的特征:變量名、類型、存儲長度、標簽、輸入格式、輸出格式存儲長度指變量在存儲時所需要的字節(jié)數(shù)。默認情況下所有的變量都定義為8字節(jié)。字符變量的長度可為1-32768字節(jié),數(shù)值變量的長度可為3-8字節(jié)。標簽是對變量的補充說明,可以為任意字符,長度可多達256個字符。SAS數(shù)據(jù)集(部分)ObservationsVariablesValue輸入輸出格式原始數(shù)據(jù)值SAS變量的值格式化的SAS變量值Dollar10.Comma8.548,23125JAN20041609501/25/2004Date9.MMDDYY10.$548,231548231Informat(輸入格式)Format(輸出格式)日期和時間數(shù)據(jù)的存儲SAS采用數(shù)值存儲日期和時間形式的數(shù)據(jù)。在默認情況下,SAS系統(tǒng)以0代表1960年1月1日0時。其它日期在SAS系統(tǒng)中被存儲為與該日期相差的天數(shù)。例如,1960年1月3日,在系統(tǒng)中存為2。

2004年1月25日,在系統(tǒng)中存為16095。注意:為了使數(shù)值型變量顯示日期形式,必須使用日期型的輸出格式,同樣地為了以日期形式輸入日期必須使用日期型的輸入格式。

SAS變量分為兩類,數(shù)值變量(Num)與字符變量(Char)。數(shù)值型變量只能取數(shù)值為值??梢杂姓撎柤靶?shù)點(+、-、?),但不能有逗號(,)。數(shù)值型是SAS的默認變量類型,默認長度為8位。字符型變量可以取字符、字母、特殊字符以及數(shù)字為值。

在DATA步中某些SAS語句中,第一次出現(xiàn)的變量名后跟一個美元符號($),即表明該變量是字符型變量,如name$或name$。如果變量后不加$符號,SAS將該變量認為數(shù)值型。在SAS中一個字符變量的取值可以有1-32768個字符長,默認長度為8個字符長;或由第一次賦值時字符長度決定。創(chuàng)建變量

使用賦值語句

Dataa;x=1;run;/*數(shù)據(jù)集a中有個變量x,值為1,為數(shù)值型*/使用INPUT語句

Datab;Inputx$yz;Datalines;Aaa2345;Run;/*創(chuàng)建三個變量,x為字符型,y、z為數(shù)值型*/變量類型轉(zhuǎn)換

字符自動轉(zhuǎn)換為數(shù)值(無法轉(zhuǎn)換為數(shù)值時,取缺失值)

data;X=1;/*X為數(shù)值變量*/Y=’10’;/*Y為字符變量*/X=Y;/*將字符變量賦值給一個數(shù)值變量時,

自動將字符變量Y轉(zhuǎn)換為數(shù)值變量*/run;data;X=1;/*X為數(shù)值變量*/Y=’10’;/*Y為字符變量*/Z=X+Y;/*算術表達式中有字符變量時,自動將字符變量Y

轉(zhuǎn)換為數(shù)值變量*/run;函數(shù)INPUT將字符轉(zhuǎn)換為數(shù)值

INPUT函數(shù)的形式:INPUT(數(shù)據(jù)源,輸入格式);其中:數(shù)據(jù)源為要轉(zhuǎn)換為數(shù)值的變量,常數(shù)或表達式。數(shù)據(jù)源既可以是數(shù)值型,也可以是字符型。輸入格式規(guī)定對數(shù)據(jù)源進行轉(zhuǎn)換的輸入格式。dataa;y=input("12345",5.2);run;數(shù)值自動轉(zhuǎn)換為字符

data;X=’abcd’;/*X為字符變量*/Y=123;/*Y為數(shù)值變量*/X=Y;/*自動將數(shù)值變量Y轉(zhuǎn)換為字符變量*/run;注意:

將數(shù)值變量賦給字符變量時,結(jié)果會受到字符變量長度的影響!長度不足時,SAS盡量轉(zhuǎn)換成能夠滿足長度限制的結(jié)果,即科學記數(shù)法。數(shù)值轉(zhuǎn)字符之后的格式:data;Y=10;/*Y為數(shù)值變量*/Z=’ROOM’||Y;/*自動將數(shù)值變量Y轉(zhuǎn)換為字符變量*/putZ=;run;data;Y=10600001;/*Y為數(shù)值變量*/Z=SUBSTR(Y,7,6);/*自動將數(shù)值變量Y轉(zhuǎn)換為字符變量*/putZ=;run;Z=ROOM10Z=600001系統(tǒng)自動地將數(shù)值轉(zhuǎn)換為字符時,使用BEST12.的輸出格式,字符值右對齊,不足12位時左側(cè)以空格補齊。函數(shù)PUT將數(shù)值轉(zhuǎn)換為字符

PUT函數(shù)的形式:PUT(數(shù)據(jù)源,輸出格式);其中:數(shù)據(jù)源為要轉(zhuǎn)換為字符值的變量,常數(shù)或表達式。數(shù)據(jù)源既可以是數(shù)值型,也可以是字符型。輸出格式規(guī)定對數(shù)據(jù)源進行轉(zhuǎn)換的輸出格式。dataa;x=put(34.416,5.2);y=input("12345",5.2);run;data;X=1;/*X為數(shù)值變量*/Y=’10’;/*Y為字符變量*/ifX<Ythenk=1;/*字符與數(shù)值變量進行比較時,

自動將字符變量Y轉(zhuǎn)換為數(shù)值變量*/run;data;Y=’10’;/*Y為字符變量*/Z=log(Y);/*需要數(shù)值變量的函數(shù)中引用字符變量時,

自動將字符變量Y轉(zhuǎn)換為數(shù)值變量*/run;自動變量

自動變量是由數(shù)據(jù)步語句自動創(chuàng)建的。這些自動變量被加入到程序數(shù)據(jù)向量(PDV)中,但是并不輸出到數(shù)據(jù)集中。自動變量在重復過程中被保留,而不是被設定為缺失。如,

_n__error_first.byvarlast.byvar_numeric_

_all_等例:使用自動變量_Numeric_。dataone;setsashelp.class;keep_numeric_;/*只保留數(shù)據(jù)集中的數(shù)值變量*/run;三SAS算符

SAS算符是一些符號,它們要求作比較、算術運算或邏輯運算。

SAS使用兩種主要類型的算符:

前綴算符和中綴算符前綴算符用于變量、常數(shù)、函數(shù)或者用括號括起來的表達式。例如:

+Y-25-COS(A)-(x1+x2-100)

前綴算符有:加號,減號,NOT和符號^。中綴算符作用在算符兩邊的運算對象上,例如6<8。中綴算符一般分為四類:算術算符、比較算符、邏輯算符和其它算符(最大、最小和連接)。1.算術算符:

算術算符表示執(zhí)行一種算術運算,包括:

**乘方*相乘/相除+相加-相減如果算術算符有一個運算對象是缺失值,運算結(jié)果也是缺失值。例如,y=x3+.;則y的值為缺失值(.)2.比較算符:

比較算符確定兩個量之間的一種關系,如果這種關系成立,則輸出結(jié)果為1(真);如果它不成立,則輸出結(jié)果為0(假)。比較算符包括:

=(EQ)等于^=(NE)不等于

>(GT)大于<(LT)小于

>=(GE)大于等于

<=(LE)小于等于(1)算術表達式的比較考慮表達式:A<=B。如果A的值為4,B的值為3,則表達式A<=B的值為0(假);若A的值為5,B的值為9,則表達式A<=B的值為1(真);若A與B的值均為47,則表達式成立,且其值為1。(2)字符的比較比較的對象可以是數(shù)值也可以是字符,但比較的結(jié)果總是數(shù)值1(真)或0(假)。字符運算對象在字符之間從左到右被比較。字符次序用機器排列次序確定(即按ASCII碼排列序列)。例如,表達式’GRAY’>’ADAMS’是真的,它與表達式

‘ANDRE,C’<’ANDRE,CLYDE’一樣,它們的值都是1。3.邏輯算符:

邏輯算符也稱為布爾(Boolean)算符,在表達式里通常用來連接一系列比較式。邏輯算符包括:

&(AND)與;|(OR)或;^(NOT)非例如,age=25

ANDsex=‘男’或age=25

&sex=‘男’

age=25

ORsex=‘男’4.運算次序:

關于運算次序,SAS有如下的三個準則:準則1:在括號里的表達式先計算;準則2:較高優(yōu)先級的運算先被執(zhí)行。

下面是各運算符的優(yōu)先等級(排在前面的優(yōu)先):

1級**、^(not)2級*、/3級+、-、

4級<、<=、=、^=、>、>=、^>、^<5級&(and)6級|(or)準則3:對于相同優(yōu)先級的算符,左邊的運算先做。但有兩個例外:對第一級,右邊的先做;

2**3**2

<->

2**(3**2)2)當兩個比較算符圍著一個量時,則等價于一個and運算。例如:12<age<20

<->

12<ageandage<20SAS函數(shù)一.SAS函數(shù)的定義1.SAS函數(shù)的定義:

SAS函數(shù)是一個子程序,它由0個或幾個自變量(參數(shù))返回一個結(jié)果值。

每個SAS函數(shù)都有一個函數(shù)名,及用括號括起來的參數(shù),這個函數(shù)對這些自變量執(zhí)行某種運算。即使沒有參數(shù)也需要括號。SAS函數(shù)的形式:

FunctionName(arg1,arg2,arg3,...)

例如:

MEAN(x,y,z,a)

SUM(x,y,z)

MIN(SUM(x,y,z),1000)

TODAY()2.SAS函數(shù)的分類:

SAS函數(shù)分為20多種類型,常見的有:算術函數(shù)、數(shù)組函數(shù)、截取函數(shù)、數(shù)學函數(shù)、概率函數(shù)、分位數(shù)函數(shù)、非中心函數(shù)、樣本統(tǒng)計函數(shù)、隨機函數(shù)、字符函數(shù)、日期時間函數(shù)等。二SAS函數(shù)的參數(shù)參數(shù)類型變量名常數(shù)函數(shù)表達式函數(shù)及其參數(shù)類型舉例。

參數(shù)個數(shù):

有些函數(shù)不需要參數(shù),有些只需要一個參數(shù),有些函數(shù)有多個參數(shù)。SAS9.1中,參數(shù)個數(shù)不能超過32767。

如果函數(shù)的參數(shù)是表達式,在函數(shù)被調(diào)用之前,所有表達式參數(shù)首先計算。參數(shù)的表示法

一般地,當函數(shù)有幾個參數(shù)時,它們之間必須用逗號(,)分隔開。不過,以下三種寫法均是合法的:

FunctionName(OFvariable1-variablen)FunctionName(OFvariablevariable...)FunctionName(variable,variable,...)

例如:

sum(ofx1-x5)sum(ofx1x2x3x4x5)sum(x1,x2,x3,x4,x5)是等價的。

正確與錯誤的表示方法

數(shù)組元素自變量的縮寫方法arrayy{10}y1-y10;/*定義數(shù)組y{10}*/x=sum(ofy{*});z=sum(ofy1-y10);兩個SUM函數(shù)的表示法是等價的。

函數(shù)結(jié)果通常函數(shù)的結(jié)果由其參數(shù)的屬性決定:

返回結(jié)果是字符時結(jié)果變量為字符;

返回結(jié)果是數(shù)值時結(jié)果變量為數(shù)值。根據(jù)缺省規(guī)則,對大多數(shù)函數(shù)來說,數(shù)值目標變量的長度是8,字符目標變量的長度通常由返回結(jié)果的長度決定三.常用的SAS函數(shù)1、數(shù)學函數(shù)ABS(x)求x的絕對值。MOD(x,y)求x除以y的余數(shù)。SQRT(x)求x的平方根。ROUND(x,eps)求x按照eps指定的精度四舍五入后的結(jié)果,比如ROUND(5654.5654,0.01)結(jié)果為5654.57CEIL(x)求大于等于x的最小整數(shù)。當x為整數(shù)時就是x本身,否則為x右邊最近的整數(shù)。FLOOR(x)求小于等于x的最大整數(shù)。當x為整數(shù)時就是x本身,否則為x左邊最近的整數(shù)。INT(x)求x扔掉小數(shù)部分后的結(jié)果。LOG(x)求x的自然對數(shù)。LOG10(x)求x的常用對數(shù)。EXP(x)指數(shù)函數(shù)。SIN(x),COS(x),TAN(x)求x的正弦、余弦、正切函數(shù)。等等2、數(shù)組函數(shù)

數(shù)組函數(shù)計算數(shù)組的維數(shù)、上下界,有利于寫出可移植的程序。數(shù)組函數(shù)包括:DIM(x)求數(shù)組x第一維的元素的個數(shù)。DIMk(x)求數(shù)組x第k維的元素的個數(shù),如dim2(x)、dim3(x)。LBOUND(x)求數(shù)組x第一維的下界。HBOUND(x)求數(shù)組x第一維的上界。LBOUNDk(x)求數(shù)組x第k維的下界。HBOUNDk(x)求數(shù)組x第k維的上界。例:DATAA;ARRAYSC{2,3}X1-X6(6*0);/*定義數(shù)組SC*/D1=DIM(SC);

D2=DIM2(SC);HB=LBOUND(SC);HB2=HBOUND2(SC);RUN;PROCPRINT;RUN;3、字符函數(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。REPEAT(s,n)字符表達式s重復n次。SUBSTR(s,p,n)從字符串s中的第p個字符開始抽取n個字符長的子串TRANWRD(s,s1,s2)從字符串s中把所有字符串s1替換成字符串s2。LENGTH(s)返回字符串s長度COMPRESS(s1,s2)從字符串s1中刪除字符串s2LEFT(s)字符串s左對齊還有如,COLLATE,LEFT,REVERSE,RIGHT,SCAN,TRANSLATE,COMPBL等4、日期時間函數(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個interval間隔后的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年5、分布密度函數(shù)、分布函數(shù)SAS提供了多種概率分布的有關函數(shù)。分布密度、概率、累積分布函數(shù)等可以通過幾種統(tǒng)一的格式調(diào)用,格式為分布函數(shù)值=CDF('分布',x<,參數(shù)表>);

密度值=PDF('分布',x<,參數(shù)表>);CDF計算由'分布'指定的分布的分布函數(shù)PDF計算分布密度函數(shù)值分布類型:

BERNOULLI,BETA,BINOMIAL,CAUCHY,CHISQUARED,EXPONENTIAL,F,GAMMA,GEOMETRIC,HYPERGEOMETRIC,LAPLACE,LOGISTIC,LOGNORMAL,NEGBINOMIAL,NORMAL

或GAUSSIAN,PARETO,POISSON,T,UNIFORM,WALD或IGAUSS,andWEIBULL分布類型可以只寫前四個字母。例如PDF('NORMAL',1.96)計算標準正態(tài)分布在1.96處的密度值(0.05844)

CDF('NORMAL',1.96)計算標準正態(tài)分布在1.96處的分布函數(shù)值(0.975)5、分布密度函數(shù)、分布函數(shù)

SAS還單獨提供了常用的分布的密度、分布函數(shù)。PROBNORM(x)標準正態(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)設隨機變量Y服從二項分布B(n,p),此函數(shù)計算P(Ym)。POISSON((lambda,n)參數(shù)為lambda的Poisson分布Yn的概率。PROBNEGB(p,n,m)參數(shù)為(n,p)的負二項分布Ym的概率。PROBHYPR(N,K,n,x<,r>)超幾何分布的分布函數(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ù)。6、分位數(shù)函數(shù)

分位數(shù)函數(shù)是概率分布函數(shù)的反函數(shù)。其自變量在0到1之間取值。分位數(shù)函數(shù)計算的是分布的左側(cè)分位數(shù)。SAS提供了六種常見連續(xù)型分布的分位數(shù)函數(shù)。PROBIT(p)標準正態(tài)分布左側(cè)p分位數(shù)。結(jié)果在-5到5之間。TINV(p,df<,nc>)自由度為df的t分布的左側(cè)p分位數(shù)。nc為非中心參數(shù)。CINV(p,df<,nc>)自由度為df的卡方分布的左側(cè)p分位數(shù)。nc為非中心參數(shù)。FINV(p,ndf,ddf<,nc>)F(ndf,ddf)分布的左側(cè)p分位數(shù)。nc為非中心參數(shù)。GAMINV(p,a)參數(shù)為a的伽馬分布的左側(cè)p分位數(shù)。BETAINV(p,a,b)參數(shù)為(a,b)的貝塔分布的左側(cè)p分位數(shù)。7、隨機數(shù)函數(shù)均勻分布隨機數(shù)UNIFORM(seed),seed必須是常數(shù),為0,或5位、6位、7位的奇數(shù)。RANUNI(seed),seed為小于2**31-1的任意常數(shù)。

正態(tài)分布隨機數(shù)NORMAL(seed),seed為0,或5位、6位、7位的奇數(shù)。RANNOR(seed),seed為任意數(shù)值

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論