【正文】
cards。 lostcard。數(shù)據(jù)行錯誤 39。 if id ne idc then do。 例 每個數(shù)據(jù)行都有一個同值的識別變量 data a。 使用 LOSTCARD語句時 , 必須用 IFTHEN語句給出丟失數(shù)據(jù)行的條件 。 當(dāng)一個觀測包含幾個數(shù)據(jù)行,且當(dāng)前觀測缺少其中的一些行時,利用 LOSTCARD語句可以防止 SAS系統(tǒng)從下一個觀測的數(shù)據(jù)行讀數(shù)據(jù)作為當(dāng)前觀測的一部分。設(shè)計復(fù)雜程序時,常會用到 DELETE語句的這種用法。 run。 set 。 例中,刪除數(shù)據(jù)集 RESDAT中 Stktype=’B’的觀測值。 if Stktype=’B’ then delete。 例 刪除部分觀測值 data stka。 DELETE語句 DELETE語句停止處理當(dāng)前觀測,該觀測值不被讀入到創(chuàng)建的數(shù)據(jù)集, SAS系統(tǒng)返回到 DATA步的開頭處理其他觀測。 run。 nmis+sector^=39。 例 計算非缺失值的觀測個數(shù) data a(keep=nmis)。 uss+ Dret**2。 上面兩段程序等價 Obs Name Height s_h 1 Alice 2 Barbara 3 Carol 4 Jane 5 Ja 6 Joyce 7 Judy 8 Louise 9 Mary …… …… 應(yīng)用舉例 例 表達式 SUMX+X*X把 X*X的結(jié)果加到 SUMX上 data a (keep=date uss)。 retain s_h 0。 set 。 run。 s_h+height。 例 累加語句等于使用 SUM函數(shù)和一個 RETAIN語句 data a (keep=name height s_h)。 累加語句累加表達式結(jié)果。 run。大秦鐵路 39。深發(fā)展 39。 length lstknm $12。 run。大秦鐵路 39。深發(fā)展 39。 例 第一掃描結(jié)果的長度不是所有數(shù)據(jù)中的最大長度時會出錯 data a。 /*規(guī)定一個已經(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é)果變量類型的準則: ? 如果表達式中的變量全為數(shù)值型 , 結(jié)果變量為數(shù)值型; ? 如果表達式中的變量全為字符型 , 結(jié)果變量為字符型; ? 如果表達式中的變量既有數(shù)值又有字符型 , 結(jié)果變量為數(shù)值型 。 /* 規(guī)定新變量 x, 它是 a和 b的和 */ t(2)=sum(of x1x5)。 run。 last_s=。 error=_error_。 by sex。 選項說明: v a r i a b l e 規(guī)定變量名或數(shù)組元素e x p r e s s i o n 有效的 S A S 表達式例 賦值語句舉例 data a。 賦值語句 語句格式: variable=expression。第 7章 數(shù)據(jù)步修改與選擇觀測 清華大學(xué)經(jīng)管學(xué)院 朱世武 Resdat樣本數(shù)據(jù): SAS論壇: 本章介紹數(shù)據(jù)步中用于修改與選擇觀測的語句。 利用修改與選擇觀測語句,可以進行數(shù)值計算、數(shù)據(jù)集修改、觀測子集選擇及輸出控制等。 將表達式結(jié)果賦予一個變量。 set 。 n=_N_。 first_s=。 proc print。 x=a+b。 /*規(guī)定數(shù)組元素,它的值是一函數(shù)值 */ a=a+b。 結(jié)果變量長度 結(jié)果變量的長度是第一次掃描結(jié)果的長度,除非事先由 LENGTH語句規(guī)定好結(jié)果變量的長度。 lstknm=39。 /*第一掃描結(jié)果的長度為 4 */ lstknm =39。 /* lstknm的長度為 4,所以顯示結(jié)果為 lstknm =大秦鐵 */ proc print。 Obs lstknm 1 大秦鐵 例 用 LENGTH語句得到正確輸出結(jié)果 data a。 /* 規(guī)定變量 lstknm的長度為 12 */ lstknm=39。 lstknm =39。 proc print。 Obs lstknm 1 大秦鐵 路 累加語句 語句格式: Variable+expression。 選項說明: v a r i a b l e 規(guī)定累加變量e x p r e s s i o n 有效的 S A S 表達式應(yīng)用準則: ? 累加變量的觀測被讀入之前 , 值為 0; ? 表達式的計算結(jié)果為缺失值時 , 取 0代替; ? 表達式可以使用比較算符; ? 語句 A+(B)中的 ( +) 是必須的 , 不能寫成 AB。 set 。 proc print。 data b (keep=name height s_h)。 s_h=sum(s_h, height, 0)。 run。 set ResDat. Dret(where =(stkcd=’000002’))。 /*USS為變量 Dret的平方和 */ run。 set 。 39。 例中, NMIS為變量 SECTOR非缺失值的觀測個數(shù),即按 SECTOR分好類股票的個數(shù)。 語句格式: DELETE。 set 。 run。 例 清空數(shù)據(jù)集 data a。 delete。 例中,刪除數(shù)據(jù)集 A中的所有觀測值,即清空數(shù)據(jù)集 A。 LOSTCARD語句 LOSTCARD語句用于重新對準輸入數(shù)據(jù) 。 語句格式 LOSTCARD。 適合使用 LOSTCARD語句的情況有: ?每個觀測有固定的輸入數(shù)據(jù)行; ?同一個觀測的每個數(shù)據(jù)行都有一個同值的識別變量。 input id 13 reject 2 idc 13 pass。 put 39。 id= idc=。 end。 301 32 301 61432 302 53 302 83171 400 92845 411 46 411 99551 。 title2 39。 run。 ? 不輸出觀測到數(shù)據(jù)集 , 丟棄開始讀入本組的數(shù)據(jù)行 ,返回到 DATA步開頭 。 ? 當(dāng)丟失記錄行的 IF條件仍是真的 , SAS重復(fù)前三步; ? 對于 IF條件不成立的一組數(shù)據(jù)行, SAS創(chuàng)建一個觀測,并增加自動變量 _N_的值。 input id1 x $ 2 id2 y $ 3 id3 z $。 cards。 proc print。每個觀測包含 3個數(shù)據(jù)行 39。 每個