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






