




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第8章 數據步循環與轉移控制DO語句 DO語句必須由一個END語句來結束。 DO和END語句之間的這些語句稱為一個DO組。 DO組可以嵌套任意次。DO語句有5類: 簡單DO語句; 循環DO語句; DO OVER語句; DO WHILE語句; DO UNTIL語句。簡單DO語句 語句格式DO; 一些SAS語句END;應用舉例 例8.1 IF/THEN語句用中DO.data a;set ResDat.class;if age14 then do;h_cm=30.5*height/12;put name= sex= age= h_cm=;end;run;329 data a;330 set fdat
2、a.class;331 if age14 then do;332 h_cm=30.5*height/12;333 put name= sex= age= h_cm=;334 end;335 run;Name=Janet Sex=F Age=15 h_cm=158.85416667Name=Mary Sex=F Age=15 h_cm=169.02083333Name=Philip Sex=M Age=16 h_cm=183Name=Ronald Sex=M Age=15 h_cm=170.29166667Name=William Sex=M Age=15 h_cm=169.02083333NO
3、TE: 從數據集 FDATA.CLASS 讀取了 19 個觀測。NOTE: 數據集 WORK.A 有 19 個觀測和 6 個變量。NOTE: “DATA 語句”所用時間(總處理時間): 實際時間 0.01 秒 CPU 時間 0.01 秒上例與下面的if語句效果一樣,但是IF語句效率較低。If age14 then H_cm=30.5*height/12;If age14 then Put name= sex= age= h_cm=; 循環DO語句 DO組中的語句需要被重復執行時要用到循環DO語句。循環DO語句根據下標變量重復執行DO和END語句之間的語句 語句格式DO index_variab
4、le=specification-1;一些SAS語句END;其中:index-variable選項定義下標變量,用于控制DO組的執行方式和重復次數。下標變量包含在創建的數據集中,可以用DROP語句刪除。 SPECIFICATION選項格式 Start ; Specification選項說明: 例8.2 缺省的步長為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,
5、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=01jan99d to 01jan2000d by 1;例句子中,起始值必須全部是數值或全部是字符常數,也可以是變量。字符常數必須用引號括起來。 例8.4 使用表達式選項。do i=1 to 10 while(xy);do i=10 to 0 by 1 while(month=jan);應用舉例 例8.5 用GO TO語句跳出循環體。data a;
6、input x y; if xy then goto skip; /*skip是循環體外的語句標號*/y=log(y-x);yy=y-20;skip: if yy then goto skip; /*skip是循環體外的語句標號*/339 y=log(y-x);340 yy=y-20;341 skip: if y=5時停止。data a;n=0;do until(n=5);put n=;n+1;end;run; END語句 END語句是組成DO組或SELECT組的最后一個語句。 語句格式END; 應用舉例 DO;若干個SAS語句END;SELECT (expression); When (ex
7、pression) SAS語句; Otherwise SAS語句; END; SELECT語句 SELECT語句選擇執行SAS語句。 語句格式SELECT; WHEN (when-expression-1) statement; WHEN(when-expression-1) statement; END; 選項說明: 應用舉例 例8.13 有SELECT表達式的SELECT語句。data a;set ResDat.st_list;obs=_n_;x=uniform(0);select (obs);when (1) x=x*10;when (2,4,6);when (3,5,7,13,15,1
8、7) x=x*100;otherwise x=1;end;run;例中,根據OBS來計算新變量X的值。當OBS為1時,執行x=x*10。當OBS為2,4,6時,X值不變。當OBS為3,5,7,13,15,17時,執行X=X*100。OBS為其它值時,執行x=1。 例8.14 沒有SELECT表達式的SELECT語句。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 spri
9、ng 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;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 winterm
10、on=janfall or wintermon=febspring mon=marspring mon=aprspring mon=maysummer mon=junsummer mon=julsummer mon=augfall or wintermon=sepNOTE: “DATA 語句”所用時間(總處理時間): 實際時間 0.03 秒 CPU 時間 0.01 秒例8.15 SELECT組的正確及錯誤用法舉例。select(x);when (x=2) put two; /*錯誤用法*/end;select(x);when(2) put two; /*正確用法*/end;select;whe
11、n (x=2) put two; /*正確用法*/end;run;例中,后兩個程序的效果相同。 IF語句IF語句的兩種類型:條件IF語句,含有一個THEN子句或ELSE子句;子集IF語句,沒有子句。IF-THEN與IF-THEN/ELSE語句表達式為真時執行THEN后面的語句, 表達式為假執行ELSE后面的語句。語句格式:IF expression THEN expression;例8.16 應用舉例。data;if x then delete;if status=OK and type=3 then count+1;if age ne agecheck then delete;if x=0
12、thenif y ne 0 then put x zero, y nozero;else put x zero, y zero;else put x nozero;if ans=9 thendo; ans=. ;put invalid answer for id=;end;else do; /*當IF條件不成立時,執行下面另一DO組 */ans=ans1;valid+1;end;子集IF語句 語句格式:IF expression;其中:expression是任意有效的表達式。如果表達式真的,SAS語句對正被創建的觀測繼續執行DATA步的語句。如果表達式是假的,SAS立即返回到DATA步的開始對
13、其他觀測執行。 例8.17 應用舉例。data a;set ResDat.Idx000001;if _n_100;run;例中,選擇前99條觀測值。GO TO語句與語句標號 GO TO語句使SAS跳到本程序步帶有標號的語句繼續往下執行。GO TO語句和指定的目標語句必須在同一DATA步。 GO TO語句語句格式:GO TO label; GOTO label;Label選項規定語句標號來指示GO TO的目標。 例8.18 應用舉例。data a;input x ;if 1=x=5 then goto ok;put x; count+1; ok: sumx+x;cards;1 2 7 2 12
14、24 22;例中,COUNT僅對大于5的數計數,SUMX+X對每個觀測都執行。 xcountsumx110122033711042112512224624348722470data a;input 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僅對大于5的數計數,SUMX+X僅對X在1和5之間的那些觀測執行。 xcountsumx1101220337134215512256243572245例8.19 上面兩例中用DO-END語句替代GOTO語句。data
15、 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 then do;put x; count+1;end;else sumx+x;cards;1 2 7 2 12 24 22;語句標號 語句標號給出GO TO,LINK, FILE語句中的選項HEADER=,或在INFILE語句中選項EOF=的位置。語句格式:LABEL: statement; LINK語句 LINK語句告訴SAS系統立即轉到由LINK語句指示的語句標號,并從那里繼續執行直到一個RETURN
16、語句。RETURN語句讓SAS立即返回到LINK語句后面的那個語句并從那里繼續執行。LINK語句和語句標號所在的目標語句必須在同一個DATA步。 語句格式LINK label; 例8.20 執行一組語句。 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 the
17、n elev=5500-wd;return; /*返回到link語句下面的year=1985;語句*/cards;aluv 523 site_1uppa 234 site_2aluy 666 site_2;typewdstationelevyear1aluv523site_1.19852uppa234site_2.19853aluy666site_248341985RETURN語句RETURN語句告訴SAS系統在DATA步當前位置上停止執行語句,返回到一個預定位置上繼續執行。語句格式RETURN;RETURN語句的作用:在LINK語句后面,RETURN語句讓SAS系統立即返回到LINK后面的語
18、句,并繼續往下執行;在FILE語句的選項HEADER=中,RETURN語句讓SAS系統立即返回到開始新頁之前執行的最后一個語句后面的語句,并繼續執行;在DATA步的其它地方,RETURN語句讓SAS系統返回到DATA步開頭。例8.23 讓SAS系統返回到DATA步開頭。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;例中,當X=Y時,RETURN語句被執行。SAS系統添加這個觀測到數據集SURVEY,并返回到DATA步的開頭。IF語句后面的二個賦值語句沒有被執行。 xyza1
19、523252334 .313671694889 .CONTINUE語句 CONTINUE語句停止當前的這次循環過程,繼續進行下一次循環。語句格式:CONTINUE; 例8.25 CONTINUE語句停止當前的循環過程,繼續進行下一次循環。data a;do i=1 to 5;input name $ idno status $;if status=PT then continue; /*返回到下次循環的開頭*/input benefits $10.;output;end;cards;/*接上頁 */Jones 9011 PTThomas 876 PTRichards 1002 FTEye/DentalKelly 85111 PTSmith 433 FTHMOKelly 85111 PTSmith 433 FTHMOJones 9011 PTThomas 876 PTRichards 1002 FTEye/Dental;Run; inameidnostatusbenefits13Richards1002FTEye/Dental25Smith433FTHMO32Smith433FTHMO45Richards1002FTEye/DentalLEAVE 語句
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷鏈物流基地項目可行性研究報告
- 生物化學醫藥知識點解析
- 汽車發動機原理與性能知識要點
- 鄉村健康教育體系構建與推廣途徑
- 我的理想職業寫給自己的一封未來信(14篇)
- 農業綠色低碳發展的全球趨勢與挑戰
- 快樂寒假回憶記事作文(11篇)
- 網絡安全與信息技術題庫構建
- 2025年藝術設計專業課程考核試卷及答案
- 2025年香港歷史文化與社會發展的考試試卷及答案
- 校長在2025暑假前期末教師大會上的講話:靜水深流腳踏實地
- (2025)全國“安全生產月活動”《安全知識》競賽試題庫(附含答案)
- 貸款后管理與客戶滿意度提升
- 自動生成的文檔-202504081202-99
- 費用類報銷管理制度
- 杭州市上城區2025年下半年下半年招考50名專職社區工作者易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年中國SUV帳篷行業市場前景預測及投資價值評估分析報告
- 福建省惠安縣2025屆七下數學期末學業質量監測試題含解析
- 2025年就業指導培訓課件
- 2025-2030石油管道行業市場深度調研及競爭格局與投資研究報告
- 腹部超聲檢查規范指南
評論
0/150
提交評論