實務分析工作中,PROC MEANS除了用來做描述統計外,更多是用來做資料的彙整,例如健保資料庫分析中,因病患有多次就診或用藥紀錄,需透過適當的整合,或稱為「歸人」在能進行後續的分析,這時PROC MEANS為重要的幫手了。
本篇內容將聚焦於使用PROC MEANS的語法完成所需要資料處理的工作,但在介紹順序上沒有特別章法,大家就依據所需要語法而自行使用了喔。
實務分析工作中,PROC MEANS除了用來做描述統計外,更多是用來做資料的彙整,例如健保資料庫分析中,因病患有多次就診或用藥紀錄,需透過適當的整合,或稱為「歸人」在能進行後續的分析,這時PROC MEANS為重要的幫手了。
本篇內容將聚焦於使用PROC MEANS的語法完成所需要資料處理的工作,但在介紹順序上沒有特別章法,大家就依據所需要語法而自行使用了喔。
偶而些朋友和我討論資料處理的問題,有時候只是資料處理流程討論,有時候是程式或語法。我曾透過許多高手的範例而學習到很多,這一次打算把一些有趣的實例,寫成範例,希望對有緣人有幫助(但對點閱率應該沒幫助)。
同一個問題,可以有許多不同的處理流程,本次的方法不見得是最好,也歡迎大家提供不同的流程和語法。
網頁廣告剛好也是你有興趣的,請幫忙點擊廣告,讓我更有動力寫出下一篇文章吧。
比較資料檔的工作,常見在問卷採用雙重資料鍵入(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; |
長久以來SAS程序產出的報表,大都透過ODS HTML將報表轉EXCEL檔,之前介紹過ODS TAGSETS.EXCELXP的語法(後續簡稱ExcelXP),也很少被使用來處理報表轉EXCEL檔的需求。
ODS HTML應只是將HTML報表的副檔名改為XLS,WIDOWS系統在預設環境下,自然會以EXCEL開啟,算是一種偷吃步吧,但每次開啟檔案,EXCEL均會出現警告「’OOO.xls’的檔案格式與副檔名不相符。此檔案可能已損毀或不安全。除非您信任此檔案的來源,否則請勿開啟此檔案。您仍要開啟此檔案嗎?」(如下圖)。
雖然只是按一個「是(Y)」就可開啟,但檔案很多時,還是挺煩人的。而且就算使用ExcelXP來匯出報表,依然會出現相同的警告,因為ExcelXP所產生的EXCEL檔不是原生的EXCEL檔格式(native Excel format (.xlsx)),詳情請參考ODS TAGSETS.EXCELXP and ODS EXCEL SHOWDOWN。
散佈圖(Scatter Plot、Scatter Diagram)亦稱為散布圖、相關圖等。目前在SAS繪製散佈圖有兩個較為簡單方法,一為使用PROC CORR,相關語法可見SAS官網的說明,用PROC CORR的方法相當簡單,而且同時會把人數、相關係數、檢定的P值呈現於圖中,但如要修改圖形或增加其他說明限制就很大了。
另一方法為本篇將分享的PROC SGPLOT,但限制為不會自動在圖形上呈現人數、相關係數和檢定的P值,此限制可透過巨集的幫忙而增加至圖形中,以PROC SGPLOT所繪統計圖,在之後需的編修彈性就高很多。
最後我們會把整組程式以改編為巨集程式,方便未來使用。
散佈圖(scatter plot)+橢圓圖(prediction ellipse)+迴歸線(regression line):
盒鬚圖(Box Plot)亦稱為盒型圖。在SAS裡面盒鬚圖的說明可到SAS官網說明文件查看,簡單說盒子底部為Q1(第25百分位數),盒子內部中線為中位數,盒子上端為Q3(第75百分位數),盒子中間的符號通常為平均值。天線一般來說是1.5倍四分位距(intra-quartile range, IQR)中最小或最大值,而在天線外面的點一般為極端值(outlier)。
盒鬚圖如下:
長條圖(Bar Chart)亦可以稱為柱狀圖、條圖、條狀圖、棒形圖等,應該是非常使用的圖形,與折線圖(Line Chart)一起繪製於同一張圖上,稱為Bar-Line Chart。
這次要分享的為Bar-Line Chart,統計圖結果如下:
身旁許多朋友都認為SAS所繪製統計圖不美麗,語法也不好寫,許多年前新增的「ODS GRAPHICS」系列我想就是改善這些狀況,經過這幾年的強化,其功能和精美程度以非吳下阿蒙。
最近幫朋友做了一份資料(可惜無法把結果與大家分享),這份報告中使用了數個統計圖呈現結果,雖然不能將結果分享出來,但統計圖的語法倒是可以和大家切磋,希望能讓使用SAS的朋友從中獲得一些想法。
ODS GRAPHICS在網路上很容易找到說明,所以這次不會花太多時間說明每一個語法的功能,倒是大家可以實際操作一遍,會比較有感覺。
這次分享的是「熱圖(Heatmap)」,圖形結果如下:
有沒有遇過在製作表格式時,某變項中的類別不見,但在製表時必須將消失的類別補上的狀況呢?不懂嗎?看看下面的表格吧,臺中市的結果沒出現在這份資料中,但最終表格還是必須把臺中市放上去,就算所有的結果都是遺漏值或零。
但SAS的PROC FREQ如果資料中沒有這項類別的資料,自然不會呈現於報表中!所以這次的分享,就是如何「強迫」PROC FREQ列出不存在但又想呈現的類別。
先來看看下面這一個簡單的程式和結果。
data test;
input x y;
datalines;
0.54 0.36
54 36
;
data test1;
set test;
pct=((x-y)/y)*100;
if pct=50 then chk=1;
run;
proc print data=test1;
run;
結果如下圖:
明明PCT看起來都是50,為什麼只有第2筆的CHK為1?
本篇主要介紹Summary Functions在SQL中的使用。
Summary Functions可以用來計算所有資料筆的函數,類似Proc Means的功能,但依據寫法也可能會如一般函數的結果。
常用的Summary Functions有Mean、Count、Max、Min等,其餘函數表列於下:
無條件捨去: CEIL(argument) | 無條件進位: FLOOR(argument) |
曾在用K函數處理中文字串文章中提及專門用來處理中文的K函數,但沒有實際的例子,最近發生了一個案例,把處理心得分享給大家參考。
原問題為,想把地址中的某一條路刪除。
例如:
台北市中山路50號 → 台北市50號
北市板橋區中山路二段 → 北市板橋區二段
這樣的取代如果用EXCEL或WORD不難處理,但在SAS中似乎不是那麼人性。
以下程式我不會特別說明語法的指令,有興趣者可請自行研究或連至我推薦的網頁查詢。
在Facebook中的「SAS戰術應用精研社」,網友偶會提到使用文字函數處理中文時遇到一些的狀況,如果使用一搬文字函數如compress、scan、substr、index等可能是得到一堆亂碼,或是找不到設定文字,又或是找到非預期中的字,或等,例如鄭姓網友所提的問題:
這是一個很有趣的需求,如何將SAS資料以所需格式直接匯出到Excel中,而不需要在Excel中手動調整,例如所有的變項都以「文字」格式匯出,或是數字格式匯出但在Excel中依然要保持Z format,也就是數字前補零。
這次所要挑戰為將結果匯出到Excel為《圖1》的樣子。
《圖1》
透過SAS/ACCESS Interface to PC Files 的PROC EXPORT程序輸出結果,會遇到工作表(sheet)的名字前出現底線(underscore),例如在SAS裡面設定工作表名稱為「A9」,但在Excel打開就變成「_A9」。
這是一個小到不行的疑問,不過多年來我也沒有去了解為何,反正大部分狀況都沒什麼影響。不過最近遇到一個工作,才讓我認真去找一下答案。最後找的答案很簡單,就是命名的時候避免使用【1~3字母加上1個或多個數字】的組合,可以參考下面的實際得到的結果。
這篇為延續2011年所寫的SAS PROC SQL入門 (Part A)小文章(謎之聲:拖搞也拖太久了!!)
本篇主要介紹如何透過SQL建立資料檔,及如何做水平合併資料,同時會提供SQL語法及傳統Data step的語法,或許這樣對學習SQL會比較有幫助。
先建立兩個練習的檔案,分別為ER1和DD1兩檔案,於【程式1】