SAS中沒有專門的處理缺失值的過程步,但是在标準化變量的過程步中可以實作缺失值的填補。其基本過程如下:
PROC STDIZE DATA=dataset REPONLY METHOD= OUT=outdata ;
VAR variables ;
RUN;
其中proc stdize 是調用标準化過程步,data=表示需要進行缺失值填補的資料庫,reponly的意思是隻取代缺失值(replace missing data only),這個在均數填補法中必須要加上,不然就得不到想要的結果,method=就是選擇填補方法,一般在針對計量資料時,我們一般選用均數填補法和中位數填補法(資料符合正态分布時METHOD=mean,偏态分布時選用METHOD=median),在填補計數資料沒有什麼好的辦法,一般也使用中位數填補法,目的是盡量不要出現帶小數點的填補項,但是其實使用中位數填補法有可能會産生帶小數點的值,那就是當樣本量(這裡專門指排除缺失值後的樣本量)是偶數的時候,打個比方:有一個100例的樣本量,缺失2個,那麼在這剩下的98個樣本量中,中位數=[an/2+ a(n+2)/2]/2,當an/2和a(n+2)/2不相等時則中位數肯定為帶小數的值。當然這種情況其實發生的機率很小,特别是大樣本以及分類數很小的時候,萬一發生了,者隻好使用衆數填補,即用出現頻率最高的頻數來填補,要是使用衆數填補則不能使用以上的過程步了,目前沒有找到很好的方法,隻能使用最笨的方法,即使用proc means 過程步求出衆數,然後在記錄這個數值,在放到data 步中進行填補。
總結一下:在使用sas(目前我用的是SAS9.2版本)進行均數填補法時,先看資料類型(當然這裡隻針對數值型資料,字元型在這裡不做讨論),如果是計量資料,使用均數填補法,過程如下:
PROC STDIZE DATA=dataset REPONLY METHOD=mean OUT=outdata ;
VAR variables ;
RUN;
把dataset改成你要填補的資料庫,把outdata改成經過均數填補法填補以後你要儲存的資料庫名字(如果沒有這個語句那麼SAS将自動儲存,形如data1,data2...),把variables改成你要進行填補的變量。
要是資料類型明顯的偏态,則使用中位數填補法,隻需把mean改成median就行了。
當資料類型是計數資料時,分兩種情況:
1.當資料排除缺失之後的觀測值為奇數時,使用中位數填補法,方法同上,
2.如果當資料排除缺失之後的觀測值為偶數時,可以使用proc means求一下中位數,如果是整數則可以使用中位數填補法,方法同上,如果不是則使用衆數填補法
注意以上方法隻适合缺失觀測不是很多的情況,如果缺失過多,應該對缺失觀測單獨進行分析,而不能盲目的進行填補,導緻結果偏離很大!