發表文章

目前顯示的是有「SAS」標籤的文章

〔SAS〕如何 精準計算工作日,扣除國定假日

圖片
AI聊天機器人的創作 這一篇所有程式均透過Gemini或ChatGPT完成,包含連文章主要說明內容,當然有做過適當的人工潤飾。 用AI寫SAS程式,自己經驗不是很好,相對Python或R來說,SAS程式很容易有錯,這一次算是難得成功,而且有很多方法確實也是超過我的能力了,把這樣的經驗和程式分享給大家 如何用SAS 精準計算工作日 手邊有兩個日期,想計算中間到底有多少個「工作天」?這不僅要扣除週末,還得考慮國定假日,甚至麻煩的補班日。如果只靠簡單的日期相減,結果一定不對。 這篇文章將用AI聊天機器人所產生的程式來解決這個問題,將程式可拆解成 5 個步驟,並讓你輕鬆套用。

〔SAS〕PROC MEANS 不只用做描述統計而已

圖片
實務分析工作中,PROC MEANS除了用來做描述統計外,更多是用來做資料的彙整,例如健保資料庫分析中,因病患有多次就診或用藥紀錄,需透過適當的整合,或稱為「歸人」在能進行後續的分析,這時PROC MEANS為重要的幫手了。 本篇內容將聚焦於使用PROC MEANS的語法完成所需要資料處理的工作,但在介紹順序上沒有特別章法,大家就依據所需要語法而自行使用了喔。

〔SAS〕資料處理實例►找出符合條件的日期資料

圖片
偶而些朋友和我討論資料處理的問題,有時候只是資料處理流程討論,有時候是程式或語法。我曾透過許多高手的範例而學習到很多,這一次打算把一些有趣的實例,寫成範例,希望對有緣人有幫助(但對點閱率應該沒幫助)。 同一個問題,可以有許多不同的處理流程,本次的方法不見得是最好,也歡迎大家提供不同的流程和語法。 網頁廣告剛好也是你有興趣的,請幫忙點擊廣告,讓我更有動力寫出下一篇文章吧。

〔SAS〕以PROC COMPARE比較資料檔

圖片
比較資料檔的工作,常見在問卷採用雙重資料鍵入(double data entry),比較兩次鍵入資料檔的差異性。 PROC COMPARE的語法不複雜,依據慣例先建立範例資料檔以供後續練習。 DATA Keyin_1; INPUT id name$ sex$ age v1 v2 v3 v4 v5; CARDS; 1 Allan M 43 1 1 2 3 4 2 Bobby M 32 2 2 3 4 1 3 Cindy F 19 4 4 4 2 1 4 Daisy F 25 4 3 2 3 3 5 Eric M 54 2 3 1 4 2 ; RUN; DATA Keyin_2; INPUT id name$ sex$ age v1 v2 v3 v4 v5; CARDS; 3 Cindy F 19 3 4 4 2 1 1 Allan M 34 1 1 2 3 4 4 daisy M 25 4 3 2 3 2 2 Bobby M 32 2 2 3 4 1 5 Eric F 54 2 3 2 4 2 ; RUN; 假設Keyin_1與Keyin_2分別為兩次鍵入的資料檔,很不幸這兩個檔案,只有ID=2這一筆資料完全一致,其他筆資料均有不同之處。 PROC COMPARE BASE= Keyin_1 COMPARE= Keyin_2 NOVALUES; RUN;

〔SAS〕使用ODS EXCEL將報表匯出為XLSX檔

圖片
長久以來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 。

〔SAS〕使用SGPLOT繪散佈圖及程式巨集化

圖片
散佈圖(Scatter Plot、Scatter Diagram)亦稱為散布圖、相關圖等。目前在SAS繪製散佈圖有兩個較為簡單方法,一為使用PROC CORR,相關語法可見 SAS官網 的說明,用PROC CORR的方法相當簡單,而且同時會把人數、相關係數、檢定的P值呈現於圖中,但如要修改圖形或增加其他說明限制就很大了。 另一方法為本篇將分享的PROC SGPLOT,但限制為不會自動在圖形上呈現人數、相關係數和檢定的P值,此限制可透過巨集的幫忙而增加至圖形中,以PROC SGPLOT所繪統計圖,在之後需的編修彈性就高很多。 最後我們會把整組程式以改編為巨集程式,方便未來使用。 散佈圖(scatter plot)+橢圓圖(prediction ellipse)+迴歸線(regression line):

〔SAS〕使用SGPLOT繪盒鬚圖

圖片
盒鬚圖 (Box Plot)亦稱為盒型圖。在SAS裡面盒鬚圖的說明可到SAS官網 說明文件 查看,簡單說盒子底部為Q1(第25百分位數),盒子內部中線為中位數,盒子上端為Q3(第75百分位數),盒子中間的符號通常為平均值。天線一般來說是1.5倍四分位距(intra-quartile range, IQR)中最小或最大值,而在天線外面的點一般為極端值(outlier)。 盒鬚圖如下:

〔SAS〕使用SGPLOT繪長條圖及折線圖

圖片
長條圖 (Bar Chart)亦可以稱為柱狀圖、條圖、條狀圖、棒形圖等,應該是非常使用的圖形,與 折線圖 (Line Chart)一起繪製於同一張圖上,稱為Bar-Line Chart。 這次要分享的為Bar-Line Chart,統計圖結果如下:

〔SAS〕以SGPANEL繪製熱圖組

圖片
本篇可以算是「 使用SGPLOT繪製熱圖(Heatmap) 」的加強版? 其實是把多張熱圖同時放在一張圖上而已啦。統計圖結果如下:

〔SAS〕使用SGPLOT繪製熱圖(Heatmap)

圖片
身旁許多朋友都認為SAS所繪製統計圖不美麗,語法也不好寫,許多年前新增的「ODS GRAPHICS」系列我想就是改善這些狀況,經過這幾年的強化,其功能和精美程度以非吳下阿蒙。 最近幫朋友做了一份資料(可惜無法把結果與大家分享),這份報告中使用了數個統計圖呈現結果,雖然不能將結果分享出來,但統計圖的語法倒是可以和大家切磋,希望能讓使用SAS的朋友從中獲得一些想法。 ODS GRAPHICS在網路上很容易找到說明,所以這次不會花太多時間說明每一個語法的功能,倒是大家可以實際操作一遍,會比較有感覺。 這次分享的是「熱圖(Heatmap)」,圖形結果如下:

〔SAS〕列聯表捕無數值的欄(列)

圖片
有沒有遇過在製作表格式時,某變項中的類別不見,但在製表時必須將消失的類別補上的狀況呢?不懂嗎?看看下面的表格吧,臺中市的結果沒出現在這份資料中,但最終表格還是必須把臺中市放上去,就算所有的結果都是遺漏值或零。 但SAS的PROC FREQ如果資料中沒有這項類別的資料,自然不會呈現於報表中!所以這次的分享,就是如何「強迫」PROC FREQ列出不存在但又想呈現的類別。

【SAS小技巧】小心 “浮點運算陷阱”

圖片
先來看看下面這一個簡單的程式和結果。 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?

【SAS小技巧】在程式編輯視窗取代「換行符號」

圖片
編輯SAS程式有時會從excel中複製變項名稱,例如譯碼簿轉到excel後選取所需變項貼到SAS中。如下圖選取「英文欄位」中的所有變項。 但貼到SAS後也會保持原樣,也就是一行一行的在程式編輯器中,如下圖。

SAS PROC SQL入門 (Part C)-Summary Functions

圖片
本篇主要介紹Summary Functions在SQL中的使用。 Summary Functions可以用來計算所有資料筆的函數,類似Proc Means的功能,但依據寫法也可能會如一般函數的結果。 常用的Summary Functions有Mean、Count、Max、Min等,其餘函數表列於下:

【SAS 小技巧】小數點後做無條件捨去或進位

圖片
SAS內建函數中無條件捨去的函數為CEIL,無條件進位的函數為FLOOR,但在預設功能只能做到捨去或進位到整數。看一下 SAS的說明及範例 : 無條件捨去: CEIL( argument )   無條件進位: FLOOR( argument )

【SAS 小技巧】替換文字中的中文字串(K函數+Macro)

圖片
曾在 用K函數處理中文字串 文章中提及專門用來處理中文的K函數,但沒有實際的例子,最近發生了一個案例,把處理心得分享給大家參考。 原問題為,想把地址中的某一條路刪除。 例如: 台北市中山路50號 → 台北市50號 北市板橋區中山路二段 → 北市板橋區二段 這樣的取代如果用EXCEL或WORD不難處理,但在SAS中似乎不是那麼人性。 以下程式我不會特別說明語法的指令,有興趣者可請自行研究或連至我推薦的網頁查詢。

【SAS 小技巧】用K函數處理中文字串

圖片
在Facebook中的「 SAS戰術應用精研社 」,網友偶會提到使用文字函數處理中文時遇到一些的狀況,如果使用一搬文字函數如compress、scan、substr、index等可能是得到一堆亂碼,或是找不到設定文字,又或是找到非預期中的字,或等,例如鄭姓網友所提的問題:

【SAS 小技巧】將資料以所需格式匯出到Excel

圖片
這是一個很有趣的需求,如何將SAS資料以所需格式直接匯出到Excel中,而不需要在Excel中手動調整,例如所有的變項都以「文字」格式匯出,或是數字格式匯出但在Excel中依然要保持Z format,也就是數字前補零。 這次所要挑戰為將結果匯出到Excel為《圖1》的樣子。 《圖1》

【SAS 小技巧】匯出Excel工作表名稱前會出現底線

透過SAS/ACCESS Interface to PC Files 的PROC EXPORT程序輸出結果,會遇到工作表(sheet)的名字前出現底線(underscore),例如在SAS裡面設定工作表名稱為「A9」,但在Excel打開就變成「_A9」。 這是一個小到不行的疑問,不過多年來我也沒有去了解為何,反正大部分狀況都沒什麼影響。不過最近遇到一個工作,才讓我認真去找一下答案。最後找的答案很簡單,就是命名的時候避免使用【 1~3字母 加 上 1個或多個數字 】的組合,可以參考下面的實際得到的結果。

SAS PROC SQL入門 (Part B)

圖片
這篇為延續2011年所寫的 SAS PROC SQL入門 (Part A) 小文章(謎之聲:拖搞也拖太久了!!) 本篇主要介紹如何透過SQL建立資料檔,及如何做水平合併資料,同時會提供SQL語法及傳統Data step的語法,或許這樣對學習SQL會比較有幫助。 先建立兩個練習的檔案,分別為ER1和DD1兩檔案,於【程式1】