Stata: 處理Missing Value

不管是什麼樣的資料庫,一定都會有 missing value。處理missing value最常見的方式就是listwise deletion,就是所有值都有的才保留,不符合的就刪掉。當然,處理missing value還有其它方式,像是multiple imputation,不過這不在今天討論的範圍,今天只講listwise deletion,以及該怎麼在stata裡面處理。

Stata version 7及之前版本,missing value只有一個值,就是 . (英文句點的那個點)。所以在早期的code,如果要排除missing value,做法通常是下if variable !=.

不過,這樣的指令到了version 8以後的版本,就不正確了! 因為第八版開始,missing value有了較多選擇,共同的特色是這些值都是從 . 開始的,如.a, .b, .k, 到.z等。換言之,舊的作法在很多情況下很容易出現問題

regress a b if c!=. & d!=.
regress a b c if d!=.
regress a b c d

在第一行的程式裡,其實這會不小心將c這個變數為.b, .c等其它亦為missing value的值包含進去,所以如果要整個regression的observation number都一樣的話,就不能再用這種作法。應該選擇的方式是 if c <. 或是if  !mi(c) 這兩種作法。

不信嗎?那拿之前(Kuso)性伴侶人數研究的案例來分析好了。之前寫的regression的程式如下:

regress dpartners dmale age dblack dother dincome if (dwidowed!=.) & (ddivorced!=.) & (dseparated!=.) & (dnevermarried!=.)& (happy<.) & (dlangcom!=.)

跑出來是1033個人。不過你應該注意到裡面有一個值 happy我是用 <.,如果改回happy!=.的話,會發生什麼事呢?

regress dpartners dmale age dblack dother dincome if (dwidowed!=.) & (ddivorced!=.) & (dseparated!=.) & (dnevermarried!=.)& (happy!=.) & (dlangcom!=.)

你會注意到結果像下圖一樣,number of obs.變成了1041。

1.png

如果想要確認一下,你可以tab一下看happy這個變數的分佈:

tab happy, missing


你會看到happy下面有幾個.d, .n,這些就是造成if happy!=0 這個語法不能完全排除happy的missing value。

2.png

所以最好的方式,就是像之前所說的,用!mi(happy)這種方式較為理想。下次再介紹其它處理missing values的技巧。

標籤: