【正文】
v a r i a b l e 規(guī)定累加變量e x p r e s s i o n 有效的 S A S 表達(dá)式應(yīng)用準(zhǔn)則: ? 累加變量的觀測被讀入之前 , 值為 0; ? 表達(dá)式的計(jì)算結(jié)果為缺失值時(shí) , 取 0代替; ? 表達(dá)式可以使用比較算符; ? 語句 A+(B)中的 ( +) 是必須的 , 不能寫成 AB。 proc print。 /* 規(guī)定變量 lstknm的長度為 12 */ lstknm=39。 /* lstknm的長度為 4,所以顯示結(jié)果為 lstknm =大秦鐵 */ proc print。 lstknm=39。 /*規(guī)定數(shù)組元素,它的值是一函數(shù)值 */ a=a+b。 proc print。 n=_N_。 將表達(dá)式結(jié)果賦予一個(gè)變量。第 7章 數(shù)據(jù)步修改與選擇觀測 清華大學(xué)經(jīng)管學(xué)院 朱世武 Resdat樣本數(shù)據(jù): SAS論壇: 本章介紹數(shù)據(jù)步中用于修改與選擇觀測的語句。 選項(xiàng)說明: v a r i a b l e 規(guī)定變量名或數(shù)組元素e x p r e s s i o n 有效的 S A S 表達(dá)式例 賦值語句舉例 data a。 error=_error_。 run。 /*規(guī)定一個(gè)已經(jīng)存在的變量 a, 它的值為原來值和 b之和 */ 結(jié)果顯示: Obs Name Sex Age Height Weight n error first_s last_s 1 Alice F 13 1 0 1 0 2 Barbara F 13 2 0 0 0 3 Carol F 14 3 0 0 0 4 Jane F 12 4 0 0 0 5 Ja F 15 5 0 0 0 6 Joyce F 11 6 0 0 0 7 Judy F 14 7 0 0 0 8 Louise F 12 8 0 0 0 9 Mary F 15 9 0 0 1 10 Alfred M 14 10 0 1 0 11 Henry M 14 11 0 0 0 …… …… 結(jié)果變量類型 決定結(jié)果變量類型的準(zhǔn)則: ? 如果表達(dá)式中的變量全為數(shù)值型 , 結(jié)果變量為數(shù)值型; ? 如果表達(dá)式中的變量全為字符型 , 結(jié)果變量為字符型; ? 如果表達(dá)式中的變量既有數(shù)值又有字符型 , 結(jié)果變量為數(shù)值型 。深發(fā)展 39。 run。深發(fā)展 39。 run。 例 累加語句等于使用 SUM函數(shù)和一個(gè) RETAIN語句 data a (keep=name height s_h)。 run。 retain s_h 0。 uss+ Dret**2。 nmis+sector^=39。 DELETE語句 DELETE語句停止處理當(dāng)前觀測,該觀測值不被讀入到創(chuàng)建的數(shù)據(jù)集, SAS系統(tǒng)返回到 DATA步的開頭處理其他觀測。 if Stktype=’B’ then delete。 set 。設(shè)計(jì)復(fù)雜程序時(shí),常會用到 DELETE語句的這種用法。 使用 LOSTCARD語句時(shí) , 必須用 IFTHEN語句給出丟失數(shù)據(jù)行的條件 。 if id ne idc then do。 lostcard。 proc print。 每個(gè)觀測包含兩個(gè)數(shù)據(jù)行 Obs id reject idc pass 1 301 32 301 61432 2 302 53 302 83171 3 411 46 411 99551 LOSTCARD語句的執(zhí)行步驟: ? SAS日志上輸出一個(gè)丟失記錄卡信息 , 一條標(biāo)尺及創(chuàng)建當(dāng)前觀測所讀的數(shù)據(jù)行 。 例 每個(gè)觀測包含 3個(gè)數(shù)據(jù)行 data a。 101 A 102 B 102 B 103 C 103 C 103 C 104 D 105 E 105 E 105 E 。 run。 LOG窗口顯示的信息: NOTE: LOST CARD. RULE: +1+2+3+4+5+6+7+8+9+0 5 101 A 6 102 B 7 102 B NOTE: LOST CARD. 8 103 C NOTE: LOST CARD. 9 103 C NOTE: LOST CARD. 11 104 D 12 105 E 13 105 E NOTE: 數(shù)據(jù)集 有 2 個(gè)觀測和 6 個(gè)變量。 set 。 例中,數(shù)據(jù)集 A從數(shù)據(jù)集 4條觀測,因?yàn)楫?dāng)指針標(biāo)識 _N_=5時(shí),遇到 STOP語句,正被處理的那條觀測沒有添加到數(shù)據(jù)集 A中 。 語句格式 : ABORTABEND|RETURN|n。 顯示管理方式和交互行方式下: ? 立即停止處理并返回到主機(jī)系統(tǒng)。 set 。 NOTE: 數(shù)據(jù)集 有 4 個(gè)觀測和 12 個(gè)變量。 if _n_=5 then abort。 NOTE: 從數(shù)據(jù)集 讀取了 5 個(gè)觀測。 NOTE: “DATA 語句 ” 所用時(shí)間(總處理時(shí)間) : 實(shí)際時(shí)間 秒 CPU 時(shí)間 秒 例 ABORT語句防止輸入無效數(shù)據(jù)時(shí)出錯(cuò)。 cards。 輸出結(jié)果: Obs ssn pay 1 111 100 WHERE語句的性質(zhì) ?WHERE語句讀入數(shù)據(jù)集之前選擇觀測 。 ?能用 WHERE語句的地方一定可以用 IF語句來代替,反之則不行。 Where hstocd between 600000 and 600899。 /*計(jì)算缺失值數(shù)目 */ Where name is null; LIKE算符的兩個(gè)特殊模式: ? 百分號 ( %) 可以替代任意多個(gè)字符 。D_an39。D_an__39。D_an%39。 例 使用算符 SAMEAND來增加較多的從句到程序中已有的 WHERE語句后面,而不需要重新打入原來的從句 proc gplot data=。 run。 Where x/y。 字符變量 C不能單獨(dú)地作為邏輯表達(dá)式 例 選擇一定范圍內(nèi)的觀測 Where x between 1 and 5。 where _n_100。 if _n_100。 語句格式 OUTPUTdatasetname1 …data setnamen。 drop score1 score3。 output。 02126 99 96 94 02128 89 90 88 。每個(gè)新觀測將包括代號 ID和一次測驗(yàn)值 SCORE. Obs ID score 1 02126 99 2 02126 96 3 02126 94 4 02128 89 5 02128 90 6 02128 88 例 一個(gè) DATA步創(chuàng)建多個(gè)數(shù)據(jù)集 data A B。 run。 by stktype。 if first. Stktype then Num=0。 run。數(shù)據(jù)處理時(shí)用這個(gè)語句會很省力。 其中: charcter規(guī)定代表缺失值的字符。