Leo Yeh's Blog

SAS 基礎程式 (2)

基本介紹

教學目標

初步了解 SAS 基礎程式如何進行報表輸出。

重點概念

(請注意以下內容皆為課程心得筆記,若有不清楚的部份,建議上官方主辦的 SAS Programming 1 課程,謝謝。)

首先列印所有觀察值和變數主要可以透過 PROC PRINT 程式步驟,搭配 VAR 敘述程式選擇特定觀察值,透過 SUM 敘述程式進行加總,透過 WHERE 敘述程式篩選條件,然而預設會列印編號,此時我們可透過 NOOBS 設定不會顯示資料編號,或者用 ID 敘述程式客製編號,就能進行最基本的列印操作。WHERE 敘述主要有運算元和運算子所組成,運算元可分為文字常數、數字常數、日期常數、文字變數和數字變數,並且所運用的變數在 SAS 資料集中要有出現才能夠使用。然而日期西元年可以用二位數和四位數,此時我們可以透過 proc options; run; 查詢 YEARCUTOFF 找出指定日期輸入格式和函數用來讀取兩位數年份之 100 年範圍的第一年,但還是建議使用四位數西元年。比較運算子中比較特別為不等於為 ^= 和 ~= 為主,與其它程式語法 != 和 <> 不相同,以及 IN 為複選的型式。若在一個 PROC PRINT 中使用兩個 WHERE 則會導致最後一個 WHERE 取代其它 WHERE ,此時必須要使用 AND 的邏輯運算子方式執行,邏輯運算子主有有三種,依照優先順序分別為 NOT、AND 和 OR 。包括運算子主要是用 CONTAINS 和 ? ,能夠找出文字變數中包括符合子字串的資料。最後 WHERE 更包括其它特別的運算子,其中除了 CONTAINS 和 LIKE 只能應用至文字變數之外,其它 BETWEEN-AND、WHERE SAME AND、IS NULL、IS MISSING 皆可應用至文字變數和數字變數。一般來說某些特殊情況會被迫需要使用 WHERE SAME AND 或 WHERE ALSO 擴大 WHERE 子句。接著可以透過 IS NULL 和 IS MISSING 運算子皆為判斷是否為遺漏值,最後透過 LIKE 運算子可以篩選特別模式的文字,其中 % 代表零至多個任意字元。

接著排序主要可以透過 PROC SORT 步驟程式,以 BY 設定排序觀察值,注意若要由大至小則 DESCENDING 必須寫在變數前面,產生排序之後的資料集,並不會進行輸出,同時若沒有設定 OUT 就會取代原始資料,此時若搭配 WHERE 敘述就要小心處理。當在 PROC PRINT 中採用 BY 則該資料集一定要針對該觀察值排序過,才可以正常執行,以該觀察值進行分組顯示。此外 PROC SORT 可以透過 NODUPKEY 只留重複的第一筆資料,和 DUPOUT 將重複資料輸出,例如: 當銀行交易資料我們針對每位客戶每日交易情況只要最後一筆資料時,就必須先透過 PROC SORT 步驟程式先以客戶 ID 、日期和時間進行遞減排序,接著再用 PROC SORT 步驟程式以客戶 ID 和日期為主刪除重複值只留每位客戶每日交易的最後一筆交易。

最後報表的增強主要設定呈現報表上方標題 TITLEn ‘text’、呈現報表下方註角 FOOTNOTEn ‘text’,屬於全域敘述所以可以直接執行,其中 n 為 1 至 10,預設為 1 ,注意標題和註角皆要在列印資料之前設定,當更新 titlen 會清除小於 n 之前的所有 title,此外可以透過 title; 清楚標題,反之註角亦然,一般來說報表標題最好與報表內容符合,增加報表可讀性。此外也可以透過 LABEL 敘述程式修改呈現的欄位名稱,最多 256 個字元,注意在 PROC PRINT 要加上 LABEL 才能正常顯示修改呈現的欄位名稱,一般來說欄位名稱可以加入與變數相關的資訊,再搭配 SPLIT 可以強制換行,增加報表可讀性。最後資料格式主要在 PROC PRINT 中透過 <$>FORMAT. 進行設定,所謂資料格式是指呈現時的樣式,並且資料集不會被修改,建議上網 Google 搜尋「sas 9.4 formats by category」找到最適合的資料格式進行設定,例如:數字前補 0 為 Zw.d ,民國年的設定為 minguo9.。

相關資源

⬅️ Go back