第五部分sas數(shù)據(jù)步循環(huán)與轉(zhuǎn)移控制_第1頁(yè)
第五部分sas數(shù)據(jù)步循環(huán)與轉(zhuǎn)移控制_第2頁(yè)
第五部分sas數(shù)據(jù)步循環(huán)與轉(zhuǎn)移控制_第3頁(yè)
第五部分sas數(shù)據(jù)步循環(huán)與轉(zhuǎn)移控制_第4頁(yè)
第五部分sas數(shù)據(jù)步循環(huán)與轉(zhuǎn)移控制_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 數(shù)據(jù)步循環(huán)與轉(zhuǎn)移控制數(shù)據(jù)步循環(huán)與轉(zhuǎn)移控制DO語(yǔ)句語(yǔ)句 DO語(yǔ)句必須由一個(gè)END語(yǔ)句來(lái)結(jié)束。 DO和END語(yǔ)句之間的這些語(yǔ)句稱為一個(gè)DO組。 DO組可以嵌套任意次。 DO語(yǔ)句有5類: 簡(jiǎn)單DO語(yǔ)句; 循環(huán)DO語(yǔ)句; DO OVER語(yǔ)句; DO WHILE語(yǔ)句; DO UNTIL語(yǔ)句。簡(jiǎn)單簡(jiǎn)單DO語(yǔ)句語(yǔ)句 語(yǔ)句格式DO; 一些SAS語(yǔ)句END;應(yīng)用舉例應(yīng)用舉例 例8.1 IF/THEN語(yǔ)句用中DO.data a;set dst.bclass;if age14 then do;Height+20put name= sex= age=;end;run;循環(huán)循環(huán)DO語(yǔ)句語(yǔ)句 DO組中的語(yǔ)句需要被重復(fù)執(zhí)

2、行時(shí)要用到循環(huán)DO語(yǔ)句。循環(huán)DO語(yǔ)句根據(jù)下標(biāo)變量重復(fù)執(zhí)行DO和END語(yǔ)句之間的語(yǔ)句 語(yǔ)句格式DO index_variable=specification-1;一些SAS語(yǔ)句END;其中:index-variable選項(xiàng)定義下標(biāo)變量,用于控制DO組的執(zhí)行方式和重復(fù)次數(shù)。下標(biāo)變量包含在創(chuàng)建的數(shù)據(jù)集中,可以用DROP語(yǔ)句刪除。 SPECIFICATION選項(xiàng)格式選項(xiàng)格式 Start ; Specification選項(xiàng)說(shuō)明: Start規(guī)定下標(biāo)變量的起始值To Stop規(guī)定下標(biāo)變量的終止值Increment規(guī)定步長(zhǎng)While Expression表達(dá)式在每次循環(huán)執(zhí)行前計(jì)算Until Expressi

3、on表達(dá)式在每次循環(huán)執(zhí)行以后計(jì)算例8.2 缺省的步長(zhǎng)為1。do I=1 to 1000;do I=1 to y+3;do I=1 to exit;例8.3 起始值例句。do i=5;do i=1 to n ;do i=n to 1 by 1;do i=k+1 to n-1;do i=1 to k-1, k+1 to n;do i=2, 3, 5, 7, 11, 13, 17;do i=0.1 to 0.9 by 0.1, 1 to 10 by 1, 20 to 100 by 10;do i=saturday, sunday;do i=01jan99d, 25feb99d;do i=01jan9

4、9d to 01jan2000d by 1;例句子中,起始值必須全部是數(shù)值或全部是字符常數(shù),也可以是變量。字符常數(shù)必須用引號(hào)括起來(lái)。 例8.4 使用表達(dá)式選項(xiàng)。do i=1 to 10 while(xy);do i=10 to 0 by 1 while(month=jan);應(yīng)用舉例應(yīng)用舉例 例8.5 用GO TO語(yǔ)句跳出循環(huán)體。data a;input x y; if xy then goto skip; /*skip是循環(huán)體外的語(yǔ)句標(biāo)號(hào)*/y=log(y-x);yy=y-20;skip: if y=5時(shí)停止。data a;n=0;do until(n=5);put n=;n+1;end;r

5、un; END語(yǔ)句語(yǔ)句 END語(yǔ)句是組成DO組或SELECT組的最后一個(gè)語(yǔ)句。 語(yǔ)句格式語(yǔ)句格式END; 應(yīng)用舉例應(yīng)用舉例 DO;若干個(gè)SAS語(yǔ)句END; SELECT (expression); When (expression) SAS語(yǔ)句; Otherwise SAS語(yǔ)句; END; SELECT語(yǔ)句語(yǔ)句 SELECT語(yǔ)句選擇執(zhí)行SAS語(yǔ)句。 語(yǔ)句格式SELECT; WHEN (when-expression-1) statement; WHEN(when-expression-1) statement; END; 選項(xiàng)說(shuō)明: select-expression選擇表達(dá)式when-exp

6、ression規(guī)定任意有效的一個(gè)SAS表達(dá)式。Statement任意可執(zhí)行的SAS語(yǔ)句應(yīng)用舉例應(yīng)用舉例 例8.13 有SELECT表達(dá)式的SELECT語(yǔ)句。data a;set dst.bclass;obs=_n_;x=uniform(0);select (obs);when (1) x=x*10;when (2,4,6);when (3,5,7,13,15,17) x=x*100;otherwise x=1;end;run;例中,根據(jù)OBS來(lái)計(jì)算新變量X的值。當(dāng)OBS為1時(shí),執(zhí)行x=x*10。當(dāng)OBS為2,4,6時(shí),X值不變。當(dāng)OBS為3,5,7,13,15,17時(shí),執(zhí)行X=X*100。OB

7、S為其它值時(shí),執(zhí)行x=1。 例8.14 沒(méi)有SELECT表達(dá)式的SELECT語(yǔ)句。data _null_;do mon=jan,feb,mar,apr,may,jun,jul,aug,sep;select; when (mon in (jun,jul,aug) put summer mon=;when (mon in (mar,apr,may) put spring mon=;otherwise put fall or winter mon=;end;end;run; 361 data _null_;362 do mon=jan,feb,mar,apr,may,jun,jul,aug,sep;

8、363 select;364 when (mon in (jun,jul,aug) put summer mon=;365 when (mon in (mar,apr,may) put spring mon=;366 otherwise put fall or winter mon=;367 end;368 end;369 run;fall or wintermon=janfall or wintermon=febspring mon=marspring mon=aprspring mon=maysummer mon=junsummer mon=julsummer mon=augfall or

9、 wintermon=sepNOTE: “DATA 語(yǔ)句”所用時(shí)間(總處理時(shí)間): 實(shí)際時(shí)間 0.03 秒 CPU 時(shí)間 0.01 秒例8.15 SELECT組的正確及錯(cuò)誤用法舉例。select(x);when (x=2) put two; /*錯(cuò)誤用法*/end;select(x);when(2) put two; /*正確用法*/end;select;when (x=2) put two; /*正確用法*/end;run;例中,后兩個(gè)程序的效果相同。 IF語(yǔ)句語(yǔ)句IF語(yǔ)句的兩種類型:條件IF語(yǔ)句,含有一個(gè)THEN子句或ELSE子句;子集IF語(yǔ)句,沒(méi)有子句。IF-THEN與與IF-THEN/

10、ELSE語(yǔ)句語(yǔ)句表達(dá)式為真時(shí)執(zhí)行THEN后面的語(yǔ)句, 表達(dá)式為假執(zhí)行ELSE后面的語(yǔ)句。 語(yǔ)句格式:IF expression THEN expression;子集子集IF語(yǔ)句語(yǔ)句 語(yǔ)句格式:IF expression;其中:expression是任意有效的表達(dá)式。如果表達(dá)式真的,SAS語(yǔ)句對(duì)正被創(chuàng)建的觀測(cè)繼續(xù)執(zhí)行DATA步的語(yǔ)句。如果表達(dá)式是假的,SAS立即返回到DATA步的開(kāi)始對(duì)其他觀測(cè)執(zhí)行。 例8.17 應(yīng)用舉例。data a;set ResDat.Idx000001;if _n_100;run;例中,選擇前99條觀測(cè)值。GO TO語(yǔ)句與語(yǔ)句標(biāo)號(hào)語(yǔ)句與語(yǔ)句標(biāo)號(hào) GOTO語(yǔ)句使SAS跳到本

11、程序步帶有標(biāo)號(hào)的語(yǔ)句繼續(xù)往下執(zhí)行。GOTO語(yǔ)句和指定的目標(biāo)語(yǔ)句必須在同一DATA步。 GOTO語(yǔ)句語(yǔ)句語(yǔ)句格式:GOTO label; GOTO label;Label選項(xiàng)規(guī)定語(yǔ)句標(biāo)號(hào)來(lái)指示GO TO的目標(biāo)。 例8.18 應(yīng)用舉例。data a;input x ;if 1=x=5 then goto ok;put x; count+1; ok: sumx+x;cards;1 2 7 2 12 24 22;run;例中,COUNT僅對(duì)大于5的數(shù)計(jì)數(shù),SUMX+X對(duì)每個(gè)觀測(cè)都執(zhí)行。 xcountsumx110122033711042112512224624348722470data a;input

12、 x ;if 1=x=5 then goto ok;put x; count+1;return;ok: sumx+x;cards;1 2 7 2 12 24 22;run;例中,COUNT僅對(duì)大于5的數(shù)計(jì)數(shù),SUMX+X僅對(duì)X在1和5之間的那些觀測(cè)執(zhí)行。 xcountsumx1101220337134215512256243572245例8.19 上面兩例中用DO-END語(yǔ)句替代GOTO語(yǔ)句。data a;input x ;if x5 then do;put x; count+1;end;sum+x;cards;1 2 7 2 12 24 22;data a;input x ;if x5 th

13、en do;put x; count+1;end;else sumx+x;cards;1 2 7 2 12 24 22;語(yǔ)句標(biāo)號(hào)語(yǔ)句標(biāo)號(hào) 語(yǔ)句標(biāo)號(hào)給出GOTO,LINK, FILE語(yǔ)句中的選項(xiàng)HEADER=,或在INFILE語(yǔ)句中選項(xiàng)EOF=的位置。 語(yǔ)句格式:LABEL: statement; LINK語(yǔ)句語(yǔ)句 LINK語(yǔ)句告訴SAS系統(tǒng)立即轉(zhuǎn)到由LINK語(yǔ)句指示的語(yǔ)句標(biāo)號(hào),并從那里繼續(xù)執(zhí)行直到一個(gè)RETURN語(yǔ)句。RETURN語(yǔ)句讓SAS立即返回到LINK語(yǔ)句后面的那個(gè)語(yǔ)句并從那里繼續(xù)執(zhí)行。LINK語(yǔ)句和語(yǔ)句標(biāo)號(hào)所在的目標(biāo)語(yǔ)句必須在同一個(gè)DATA步。 語(yǔ)句格式語(yǔ)句格式LINK label;

14、 例8.20 執(zhí)行一組語(yǔ)句。 data bydro;input type $ wd station $;label type=station type wd=depth to water;elev=.;if type=aluy then link calcu;year=1985;return;calcu: if station=site_1 then elev=6650-wd; if station=site_2 then elev=5500-wd;return; /*返回到link語(yǔ)句下面的year=1985;語(yǔ)句*/cards;aluv 523 site_1uppa 234 site_2a

15、luy 666 site_2;typewdstationelevyear1aluv523site_1.19852uppa234site_2.19853aluy666site_248341985RETURN語(yǔ)句語(yǔ)句RETURN語(yǔ)句告訴SAS系統(tǒng)在DATA步當(dāng)前位置上停止執(zhí)行語(yǔ)句,返回到一個(gè)預(yù)定位置上繼續(xù)執(zhí)行。語(yǔ)句格式語(yǔ)句格式RETURN;RETURN語(yǔ)句的作用:語(yǔ)句的作用:在LINK語(yǔ)句后面,RETURN語(yǔ)句讓SAS系統(tǒng)立即返回到LINK后面的語(yǔ)句,并繼續(xù)往下執(zhí)行;在FILE語(yǔ)句的選項(xiàng)HEADER=中,RETURN語(yǔ)句讓SAS系統(tǒng)立即返回到開(kāi)始新頁(yè)之前執(zhí)行的最后一個(gè)語(yǔ)句后面的語(yǔ)句,并繼續(xù)執(zhí)行;在

16、在DATA步的其它地方,步的其它地方,RETURN語(yǔ)句讓語(yǔ)句讓SAS系統(tǒng)返回到系統(tǒng)返回到DATA步開(kāi)頭。步開(kāi)頭。例8.23 讓SAS系統(tǒng)返回到DATA步開(kāi)頭。data survey;input x y z;if x=y then return;x=y+z; a=x*2;cards;1 2 3 3 3 45 6 78 8 9;例中,當(dāng)X=Y時(shí),RETURN語(yǔ)句被執(zhí)行。SAS系統(tǒng)添加這個(gè)觀測(cè)到數(shù)據(jù)集SURVEY,并返回到DATA步的開(kāi)頭。IF語(yǔ)句后面的二個(gè)賦值語(yǔ)句沒(méi)有被執(zhí)行。 xyza1523252334 .313671694889 .CONTINUE語(yǔ)句語(yǔ)句 CONTINUE語(yǔ)句停止當(dāng)前的這次循

17、環(huán)過(guò)程,繼續(xù)進(jìn)行下一次循環(huán)。 語(yǔ)句格式:CONTINUE; 例例8.25 CONTINUE語(yǔ)句停止當(dāng)前的循環(huán)過(guò)程,繼續(xù)進(jìn)行下語(yǔ)句停止當(dāng)前的循環(huán)過(guò)程,繼續(xù)進(jìn)行下一次循環(huán)一次循環(huán)。data a;do i=1 to 5;input name $ idno status $;if status=PT then continue; /*返回到下次循環(huán)的開(kāi)頭*/input benefits $10.;output;end;cards;/*接上頁(yè) */Jones 9011 PTThomas 876 PTRichards 1002 FTEye/DentalKelly 85111 PTSmith 433 FTH

18、MOKelly 85111 PTSmith 433 FTHMOJones 9011 PTThomas 876 PTRichards 1002 FTEye/Dental;Run; inameidnostatusbenefits13Richards1002FTEye/Dental25Smith433FTHMO32Smith433FTHMO45Richards1002FTEye/DentalLEAVE 語(yǔ)句語(yǔ)句 LEAVE 語(yǔ)句停止當(dāng)前DO組循環(huán)或SELECT組的處理過(guò)程,并繼續(xù)執(zhí)行DO組或SELECT組后面的語(yǔ)句。 語(yǔ)句格式:LEAVE; 例例8.26 給定條件下停止給定條件下停止DO循環(huán)的處理過(guò)程循環(huán)的處理過(guò)程data week

溫馨提示

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

評(píng)論

0/150

提交評(píng)論