最近有一個數據邏輯審核的工作,要從大量的數據中篩選出不符合要求(邏輯或業務規則)的數據,有點數據質疑的味道。(相信大家在搞調查的時候,數據清理環節經常要遇到。)篩選出的結果要標示出來,用不同顏色標示不同的異常類型。按通常的思路,這種工作無非兩個辦法:(1)手工看,并在excel里標示顏色來區分;(2)使用excel的條件格式。但方法(1)容易出錯,“漏檢”率比較高,且數據量相當大,“看是看不過來的”;方法(2)倒是可以考慮,但仔細研究后,excel的條件格式只支持三個條件(2003版本,07版本多些)。另外,用excel有諸多不便,一是數據量超過了其行數限制,二是條件格式的運算速度問題,三是結果的輸出問題(篩選出來的數據還是要手工拷貝)、四是對于一些復雜的條件,還需要使用vba來實現,無法在窗體上設置。綜合考慮數據量、運算速度、方便程度后,我還是選擇SAS作為工具來進行。
這個程序大致思路如下:
(1)讀取待審核數據文件;
(2)將邏輯規則做成數據表,按照邏輯規則篩選異常數據;
(3)給違反邏輯規則的異常數據標上顏色。
(4)分層(如分省、分縣)輸出異常數據為EXCEL。
(1)和(2)沒什么難度,現在來談談(3)和(4)的實現。使用proc report過程,在輸出數據集的所有變量后,寫一個計算變量,如變量名為ComFormat;定義該變量為不顯示:define ComFormat/noprint; 這個變量的定義計算部分內寫如條件:
If 條件1 then do;
call define("var1", "style", "style=[background=red]");
這句的意思是,但條件1成立的時候,把var1單元格的背景色改為紅色。
當然你也不設置背景色,可以設置字體顏色,邊框,底紋等等。具體代碼可以去查style的幫助文檔。這里最大的優點是,可以設置多個條件,你可以寫n個條件,也就是一個if接著另一個if,并且if語句還可以嵌套,多復雜的條件都可以實現。
(4)批量輸出,我的數據是分層的,要求按層變量輸出,如果層數多(如要按100個或1000個層輸出數據)的話,也比較麻煩,我用的辦法是寫了一個macro,用循環來調用這個macro實現,自動批量的輸出。
小結:(1)SAS可以實現類似EXCEL效果的條件格式,且條件可以非常復雜;
(2)此方法可以應用于臨床研究的數據質疑,數據審核等工作;不同的顏色用于區分不同的邏輯異常類型。
(3)數據輸出方便,具有一些其他軟件無法比擬的優點。