比較資料檔的工作,常見在問卷採用雙重資料鍵入(double data entry),比較兩次鍵入資料檔的差異性。
PROC COMPARE的語法不複雜,依據慣例先建立範例資料檔以供後續練習。
DATA Keyin_1; DATA Keyin_2; |
假設Keyin_1與Keyin_2分別為兩次鍵入的資料檔,很不幸這兩個檔案,只有ID=2這一筆資料完全一致,其他筆資料均有不同之處。
PROC COMPARE BASE= Keyin_1 COMPARE= Keyin_2 NOVALUES; |
以最簡單的語法執行,其中BASE指令為基礎資料檔,COMPARE指令為比較的資料檔,NOVALUES指令能不顯示詳細數值的比較(之後再說明),結果如下圖
結果顯示,這兩個檔案沒有任何一筆資料相同,剛剛不是有說至少ID=2相同,但結果卻不是如此,這是因為我們使用ID作為判斷依據時,必須使用ID指令。在使用ID指令前,要先將變項排序,程式與結果如下。
PROC SORT DATA = Keyin_1; PROC COMPARE BASE= Keyin_1 COMPARE= Keyin_2 NOVALUES; |
當可以跑出正確的比較後,將NOVALUES指令刪除,重新在執行一次,如果不想看綜合報表可以是用NOSUMMARY指令將其關閉。
PROC COMPARE BASE= Keyin_1 COMPARE= Keyin_2 NOSUMMARY; |
無使用NOVALUES下,可得詳細的比較結果,會依據「變項」將各ID比較不一致的結果呈現,如在sex變項中,同時有ID=4和ID=5兩筆資料不相同。
如果想看同一個ID錯誤的狀況可以加上BY指令,即可依據ID呈現結果。
PROC COMPARE BASE= Keyin_1 COMPARE= Keyin_2 NOSUMMARY; |
以PROC COMPARE能找出「鍵入不相同的資料」,稍微加工一下,就可以找出「鍵入完全相同的資料」,語法如下,這裡就不詳細說明,有興趣者可自行學習。
PROC COMPARE BASE= Keyin_1 COMPARE= Keyin_2 noprint OUT=Keyin_compare outnoequal outbase outcomp outdif; proc sql; |
最後在資料檔「Kyein_diff_id」可以看到不相同的ID,而在「Keyin_same_id」則可以看到鍵入相同的ID。
PROC COMPARE的應用其實不只可於資料鍵入使用,有時候我們在處理資料過程中,不確定能否產生相同或些許差異的資料檔,也可以透過PROC COMPARE來完成資料檔的比較。
沒有留言:
張貼留言