SAS (統(tǒng)計(jì)分析軟件)課件:第3章 SAS函數(shù)與CALL子程序_第1頁
SAS (統(tǒng)計(jì)分析軟件)課件:第3章 SAS函數(shù)與CALL子程序_第2頁
SAS (統(tǒng)計(jì)分析軟件)課件:第3章 SAS函數(shù)與CALL子程序_第3頁
SAS (統(tǒng)計(jì)分析軟件)課件:第3章 SAS函數(shù)與CALL子程序_第4頁
SAS (統(tǒng)計(jì)分析軟件)課件:第3章 SAS函數(shù)與CALL子程序_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第3章 SAS函數(shù)與CALL子程序SAS函數(shù)定義 SAS函數(shù)是一個(gè)子程序,對自變量返回一個(gè)結(jié)果值。SAS函數(shù)的形式:函數(shù)名(X1, X2, )函數(shù)用于組合表達(dá)式可以簡化編程和統(tǒng)計(jì)計(jì)算例3.1 表達(dá)式中用函數(shù)。data a(keep=date y d min); /*保留date, y, d, min四個(gè)變量*/set ResDat.idx000001;y=year(date); /*函數(shù)year給出變量date年份*/d=weekday(date); /*函數(shù)weekday給出變量date在一周內(nèi)的哪一天*/min=min(sum(oppr, hipr, lopr,clpr),1000); r

2、un;例3.2 條件語句中使用函數(shù)。data a;set ResDat.idx000001;where year(date)1996; /* Where語句中使用Year函數(shù) *run;用函數(shù)處理多變量可以簡化程序例3.3 用與不用SAS函數(shù)時(shí)的程序。不用SAS函數(shù)。totx=xl+x2+x3+x4+x5+x6+x7+x8+x9+x10; if totxy then least=totx;else least=y;使用SAS函數(shù)。leastmin(sum(of x1-x10),y);例中,兩段程序的結(jié)果相同,第二段只有一個(gè)語句,非常簡單。函數(shù)自變量自變量類型: 變量名; 常數(shù); 函數(shù); 表達(dá)式

3、。例3.4 函數(shù)及其自變量類型舉例。 自變量個(gè)數(shù): 有些函數(shù)不需要自變量,有些只需要一個(gè)自變量,有些函數(shù)有多個(gè)自變量。SAS9.1中,自變量個(gè)數(shù)不能超過32767。 如果函數(shù)的自變量是表達(dá)式,在函數(shù)被調(diào)用之前,所有表達(dá)式自變量首先計(jì)算。自變量表示法:當(dāng)函數(shù)有多個(gè)自變量時(shí),必須用逗號分隔開。自變量名縮寫方法: 函數(shù)名(OF變量名1變量名n ) 例3.5 正確與錯(cuò)誤的表示方法。例3.6 數(shù)組元素自變量的縮寫方法。array y10 y1-y10; /*定義數(shù)組y10 */x=sum (of y*);z=sum (of y1-y10);例中,兩個(gè)SUM函數(shù)的表示法是等價(jià)的。 函數(shù)結(jié)果通常函數(shù)的結(jié)果由

4、其自變量的屬性決定: 自變量是字符時(shí)結(jié)果變量為字符; 自變量是數(shù)值時(shí)結(jié)果變量為數(shù)值。PUT函數(shù)是一個(gè)例外,它不管自變量是什么類型,其結(jié)果總是字符值。根據(jù)缺省規(guī)則,對大多數(shù)函數(shù)來說,數(shù)值目標(biāo)變量的長度是8,字符目標(biāo)變量的長度沒有缺省規(guī)則 。目標(biāo)變量長度不用缺省規(guī)則的函數(shù)見課本表3.1。用PUT語句在LOG窗口顯示函數(shù)值例3.7 顯示概率值和分位數(shù)。data;Y=probnorm(1.96); /* 標(biāo)準(zhǔn)正態(tài)分布小于1.96的概率 */put Y;q1=tinv(.95, 2); /*自由度為2的t分布的0.95分位數(shù)*/q2=tinv(.95, 2, 3); /*自由為2,非中心參數(shù)為3的t分布

5、的0.95分位數(shù)*/put q1= q2=;run;0.9750021049q1=2.9199855804 q2=13.894376071日期時(shí)間函數(shù) SAS日期和時(shí)間存貯標(biāo)準(zhǔn)是以1960年1月1日0時(shí)0分0秒為起點(diǎn),然后以相應(yīng)的間隔記時(shí)。如1960年1月1日9時(shí)0分,按日記的數(shù)值就是0,按小時(shí)記的數(shù)值就是9。1960年1月2日0時(shí)0分,按日記的數(shù)值就是1,按小時(shí)記就是24等。 由于日期函數(shù)是一類非常重要的函數(shù),特別是對金融數(shù)據(jù)處理和金融計(jì)算,借助日期函數(shù)可以極大提高效率。應(yīng)用舉例 例3.8 計(jì)算兩個(gè)日期之間的天數(shù)。data _null_;sdate=01jan2002d;edate=01ja

6、n2003d;actual=datdif(sdate, edate, act/act); /*按每個(gè)月的實(shí)際天數(shù)算 */days360=datdif(sdate, edate, 30/360); /*按每個(gè)月30天計(jì)算 */put actual= days360=;run;data _null_;actual=datdif(01jan2002d, 01jan2003d, act/act);days360=datdif(01jan2002d, 01jan2003d, 30/360);put actual= days360=;run;例中,兩段程序的結(jié)果一樣。actual=365, days360

7、=360.例3.10 以日為單位計(jì)算當(dāng)前日期的天數(shù)。data;x=date (); y=today();put x= y=;run;例中,DATE()和TODAY()結(jié)果一樣,都是返回當(dāng)天的天數(shù)。當(dāng)然,也可以用一定的日期格式表示它們。data;x=date (); y=today();format x y yymmdd10.;put x= y=;run;結(jié)果顯示:x=17232 y=17232結(jié)果顯示:x=2007-03-07 y=2007-03-07例3.12 計(jì)算日期值所在的年季月以及處于某月的第幾天。data a;set ResDat.stk000001 (obs=10);keep da

8、te year qtr month day;year=year (date);qtr=qtr (date);month=month (date);day=day (date);proc print noobs;run; Date year qtr month day1991-01-02 1991 1 1 21991-01-03 1991 1 1 3 1991-01-04 1991 1 1 4 1991-01-05 1991 1 1 5 1991-01-07 1991 1 1 7 1991-01-08 1991 1 1 8 1991-01-09 1991 1 1 9 1991-01-10 199

9、1 1 1 10 1991-01-11 1991 1 1 11 1991-01-12 1991 1 1 12例3.14 將日期時(shí)間值換算為以秒計(jì)數(shù)的計(jì)算方法。data;mdy=mdy (08,18,2001); put mdy=;format mdy yymmdd10.;hms=hms (21,50,51); put hms=;x=21*60*60+50*60+51; put x=;dhms=dhms (date (), 21,50,51); put dhms=;dhms=dhms (15263,21,50,51); put dhms=;y=15263*24*3600+x; put y=;ru

10、n;結(jié)果顯示:mdy=2001-08-18hms=78651x=78651dhms=1347832251dhms=1318801851y=1318801851 概率分布函數(shù)標(biāo)準(zhǔn)正態(tài)分布 PROBNORM(X)計(jì)算標(biāo)準(zhǔn)正態(tài)分布隨機(jī)變量小于X的概率。 例3.15 計(jì)算三個(gè)特殊的正態(tài)概率值。data;P1=probnorm(0);P2=probnorm(1.96);P3=probnorm(2.5758293);put P1= P2= P3=;run;結(jié)果顯示:P1=0.5P2=0.9750021049P3=0.9949999999樣本統(tǒng)計(jì)函數(shù) 樣本統(tǒng)計(jì)函數(shù)在實(shí)際中的用處不是很大,因?yàn)閼?yīng)用這些函數(shù)時(shí),

11、一定要把樣本的觀測數(shù)據(jù)放在同一行才可以,現(xiàn)實(shí)中樣本的觀測數(shù)據(jù)卻往往是按一列一列排的。一般情況下,求變量X的樣本統(tǒng)計(jì)函數(shù)值時(shí)要用別的方法。樣本統(tǒng)計(jì)量函數(shù)共有15個(gè)。 均值 MEAN(of xl-xn) 或 MEAN(x,y,z, )計(jì)算非缺失自變量的算術(shù)平均。自變量中至少有一個(gè)非缺失值。 求和 SUM(of xl-xn) 或 SUM (x1,x2, )計(jì)算自變量的和。要求有兩個(gè)以上自變量。 方差 VAR(of xl-xn) 或 VAR (x1,x2, )計(jì)算自變量中非缺失值的方差。要求至少有兩個(gè)自變量。 隨機(jī)數(shù)函數(shù) SAS系統(tǒng)提供11種隨機(jī)數(shù)函數(shù)。由于隨機(jī)數(shù)函數(shù)是進(jìn)行隨機(jī)模擬的基礎(chǔ),這里我們通過

12、例子,給出每種隨機(jī)數(shù)發(fā)生程序,供讀者參考。 正態(tài)分布 例3.27 用函數(shù)RANNOR產(chǎn)生正態(tài)分布隨機(jī)數(shù)。data RV;retain _seed_ 0; /*retain 賦初值0給_seed_*/mu=0;sigma=1; do _i_ = 1 to 1000;Normal1 = mu + sigma * rannor(_seed_); /*均值為mu,標(biāo)準(zhǔn)差為sigma*/output;end;drop _seed_ _i_ mu sigma;run;Normal1-0.9721-0.70001-2.34007-0.10939-0.01883-0.641540.8187660.221107

13、例3.28 用函數(shù)NORMAL產(chǎn)生正態(tài)分布隨機(jī)數(shù)。data RV;retain _seed_ 0;mu=0;sigma=1;do _i_ = 1 to 1000;normal1 = 0 + 1 * normal(_seed_);/*均值為mu,標(biāo)準(zhǔn)差為sigma*/output;end;drop _seed_ _i_;run;均勻分布 例3.29 用函數(shù)RANUNI產(chǎn)生均勻分布隨機(jī)數(shù)。data RV1; retain _seed_ 0; a=-1; b=2; do _i_ = 1 to 1000;uniform1 = a + (b-a) * ranuni(_seed_); /*區(qū)間a, b上的

14、均勻分布*/output;end;drop _seed_ _i_;run;例3.30 用函數(shù)UNIFORM產(chǎn)生均勻分布隨機(jī)數(shù)。data RV1; retain _seed_ 0; a=-1; b=2; do _i_ = 1 to 1000;uniform1 = a + (b - a) * uniform(_seed_); /*區(qū)間a, b上的均勻分布*/output; end; drop _seed_ _i_;run; 隨機(jī)數(shù)函數(shù)自變量SEED 隨機(jī)數(shù)函數(shù)使用一個(gè)自變量SEED來選擇產(chǎn)生隨機(jī)數(shù)的初始種子值,由這個(gè)值開始產(chǎn)生隨機(jī)數(shù)流。自變量SEED的取值和初始化類型如下表列出。 表3.4 SEE

15、D取值與初始化類型 產(chǎn)生隨機(jī)數(shù)的過程中,自變量SEED的值保持不變,種子則不斷變化。所以,用隨機(jī)函數(shù)產(chǎn)生隨機(jī)數(shù)時(shí),不能控制種子的值,因此也不可能控制初始化之后的隨機(jī)數(shù)。如果要控制隨機(jī)數(shù)流,就要用隨機(jī)數(shù)函數(shù)的CALL子程序。 SAS CALL 子程序 SAS系統(tǒng)提供一系列CALL子程序,用于產(chǎn)生隨機(jī)數(shù)或執(zhí)行其它的系統(tǒng)功能,詳見表3.5,3.6。 隨機(jī)數(shù)子程序 用隨機(jī)數(shù)子程序可以更好地控制種子流和隨機(jī)數(shù)流。除NORMAL和UNIFORM這兩個(gè)函數(shù)之外,所有隨機(jī)數(shù)函數(shù)都有一個(gè)相應(yīng)的子程序。CALL語句激活隨機(jī)數(shù)子程序的格式為:CALL routine (seed, variate);選項(xiàng)說明: 使用

16、CALL子程序時(shí),首先要對SEED變量賦初值。同時(shí)產(chǎn)生幾個(gè)隨機(jī)數(shù)流時(shí),用CALL子程序比用隨機(jī)函數(shù)的效果更好。因?yàn)?,用隨機(jī)數(shù)函數(shù)同時(shí)創(chuàng)建的多個(gè)隨機(jī)數(shù)變量都屬于同一個(gè)隨機(jī)數(shù)流。 例3.38 使用隨機(jī)函數(shù)產(chǎn)生兩個(gè)隨機(jī)數(shù)變量屬于同一個(gè)隨機(jī)數(shù)流。data RV;retain seed1 seed2 161321804;do I=1 to 5;x1= ranuni(seed1);x2= ranuni(seed2);output;end;options nocenter;proc print;run;例中,SEED1和SEED2的初值相同,但X1和X2的第一個(gè)觀測值卻不相同。因?yàn)?,SEED2的值在這里不起

17、作用,X2的第一個(gè)值并不是由SEED2產(chǎn)生的,而是產(chǎn)生第一個(gè)X1后一個(gè)新種子的結(jié)果。所以,這里產(chǎn)生的兩個(gè)隨機(jī)數(shù)變量屬于同一個(gè)隨機(jī)數(shù)流。 結(jié)果顯示:Obs seed1 seed2 I x1 x2 1 161321804 161321804 1 0.43617 0.64888 2 161321804 161321804 2 0.34138 0.42729 3 161321804 161321804 3 0.43237 0.63834 4 161321804 161321804 4 0.74690 0.89710 5 161321804 161321804 5 0.13630 0.19031例3.39 使用CALL子程序產(chǎn)生兩個(gè)獨(dú)立的種子流和隨機(jī)數(shù)流。data RV;retain seed3 161321804 seed4 135279821;do I=1 to 5;call ranuni(seed3, X3);call ranuni(seed4, X4);output;end;proc print;run;例中,產(chǎn)生兩個(gè)獨(dú)立的種子流和隨機(jī)數(shù)流。因?yàn)镾EED3=SEED1,所以X3表示的隨機(jī)

溫馨提示

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

最新文檔

評論

0/150

提交評論