Leo Yeh's Blog

SAS 基礎程式 (1)

基本介紹

教學目標

初步了解 SAS 基礎程式基本概念。

重點概念

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

SAS 簡單來說就是一系列商業管理的處理工具,提供從資料存取、管理、分析和呈現整合的服務。其中 Base SAS 又稱 SAS Foundation 為 SAS 工具生態圈中最底層的應用。接著我們可以透過 SAS Enterprise Guide 和 SAS 視窗環境編輯器執行 SAS 程式。其中 SAS Enterprise Guide 中流程的概念有助於 SAS 程式按照流程執行,此外執行主要可以分為互動模式、非互動模式和批次模式。SAS 程式主要是由一連串的步驟所組成,主要又分成 DATA STEP 整理資料和 PROC STEP 分析資料,一個步驟中會由一系統敘述句所組成。一般來說若是由 DATA 開頭就是 DATA STEP ,由 PROC 開頭就是 PROC STEP ,當遇到 RUN 敘述 (佔 80% 的情況) 、 QUIT 敘述 (佔 20% 的情況) 或者碰到新的步驟時就會結束步驟執行,因為 SAS 的執行是以步驟為單位執行,所以知道開始敘述和結束敘述就非常重要,否則很容易會遇到 SAS 程式一直執行中,不是當機而是因為互動模式的情況下在等待結束敘述。SAS 視窗環境編輯器主要有日誌、增強型編輯器、程式編輯器、輸出和結果檢視器等頁面,其中日誌會記錄執行程式碼,執行狀況 (NOTE)、執行小問題不影響結果 (WARNING),執行嚴重錯誤影響結果 (ERROR),日誌清除按 Contrl + E 。當步驟出錯則會跳過該錯誤步驟繼續往下執行,目前結果檢視器預設已經取代輸出,可以在工具→選項→喜好設定→結果→建立清單,勾選後就能產生結果至輸出介面。此外在 SAS 視窗環境編輯器的左方會有檔案總管就能瀏覽相關檔案,最後按上方小黑人按鈕,或按 F3 鈕就能執行 SAS 程式提交作業。

首先敘述程式皆會由關鍵字開頭,同時結尾永遠是分號 (;) 結束。SAS 程式非常自由沒有太多限制,但可讀性會不佳,像是多行敘述、相同一行多敘述、沒有大小寫區別皆是合法 SAS 敘述,但是建議新的敘述皆要換行、字與字之間善用空隔、步驟中的敘述善用縮排和多行敘述善用縮排。此外我們可以透過 SAS Enterprise Guide 工具,選擇編輯→格式化程式碼,就能夠針對 SAS 程式碼進行自動化排版。SAS 註備註要有兩種寫法,一是 / 開頭 / 結束,二是 * 開頭 ; 結束,兩種皆可以跨行備註。最後語法錯誤的問題在於撰寫程式碼時發生不符合規範就會發生錯誤,像是拼錯關鍵字、沒有分號、沒有語法、引號不對應,程式執行完之後最好先看記錄是否沒有錯誤再看結果。然而當發生引號不對應錯誤時,再修改程式碼之後執行,因為互動式模式就會導致之後提交執行還是會卡住,此時要按 SAS 視窗環境編輯器上方的驚探號按鈕先取消已提交的陳述式,接著再提交執行,才能夠正常執行 SAS 程式。當發生問題時,可以 PROC SETINIT; RUN; 主要查看公司有購買哪些模組,以及 PROC PRODUCT_STATUS; RUN; 主要查看是否有正常安裝模組和版本號,這些訊息有助於 SAS 技術部門協助解決問題。

接著資料集的結構,橫的主要為觀測值和直的主要為變數,簡單來說資料集就是資料表,觀測值就是列、變數就是欄,接著資料集主要有 Descriptor Portion 和 Data Portion 所組成,其中 Descriptor Portion 主要儲存關於資料集描述和變數的描述,程式敘述為 PROC CONTENTS DATA = SAS 資料集; RUN;查看。Data Portion 主要儲存資料內容,在 SAS 中只有文字和數字兩大類,文字在呈現時是左靠,數值在呈現時是右靠,程式敘述為 PROC PRINT DATA = SAS 資料集; RUN; 查看,一般來說當資料量大時查看資料內容就會花些時間。變數命名主要可以英數字底線、開頭不能是數字、大小寫不區分,長度不能超過 32 字元,建議不要用中文變數名稱。文字型變數可以儲存任何字元,一個文字為 1 位元組,數值型變數預設以浮點數儲存,主要為 8 位元組。遺漏值在文字型變數會以空白 (‘ ‘) 為主,若在數值型變數則會以負無窮大 (.) 為主,所以當進行計算時特別注意。此外日期值在 SAS 中主要會當成整數來儲存從 1960/01/01 為 0 開始計算單位為天,而時間則會從午夜零點開始計算單位為秒。

再來資料館主要是一堆資料集蒐集的位置,對應至電腦系統中的資料夾,主要可分為暫存資料館和永久資料館,當我們要存取時會透過 libref 進行存取。所謂暫存資料館為當 SAS 視窗關閉時會自動被釋放和刪除,也是 Work 暫存資料館,主要有 SAS 維護管理,每個人的 WORK 暫存資料館皆不一樣,一般主要應用於中繼和測試資料。所謂永久資料館預設則會開啟 SASHELP 和 SASUSER 兩種,SASHELP 主要為範例檔,SASUSER 主要為每個人的個人資料夾。接著如何讀取資料館資料集,主要為資料館名稱.資料集名稱,預設資料館名稱則為 WORK,使用者定義資料館會儲存至永久資料館中,但每次使用時皆要進行設定,以及不同作業系統的檔案路徑會不一樣。資料館命名最多 8 個字元,宣告主要透過 LIBNAME libref “SAS 資料館” ; 程式敘述執行,基本上不用 DATA STEP 和 PROC STEP 程式敘述,不用 RUN 程式敘述直接執行,當然我們也可以透過 PROC CONTENTS DATA=libref.ALL RUN; 程式敘述就能瀏覽資料館的所有資訊,此外若透過 PROC CONTENTS DATA=libref.ALL NODS RUN; 程式敘述就只會瀏覽目錄資訊和資料館成員。最後我們可以透過 LIBNAME libref CLEAR; 程式敘述或重新指定資料館,就能釋放資料館。

相關資源

⬅️ Go back