SAS Foundation

SAS 系統管理 (41)

教學目標

初步了解 SAS Foundation 軟體之基本訂單安裝指引中的四大步驟。

重點概念

基本訂單安裝指引的官方文件主要提到部署 SAS Foundation 軟體主要有四大步驟,本篇主要針對四大步驟進行簡單介紹與重點摘要,分別為:

  1. 完成前置安裝確認清單。
  2. 建立 SAS 軟體安裝檔。
  3. 安裝 SAS 軟體。
  4. 驗證 SAS 部署。

完成前置安裝確認清單

完成前置安裝確認清單主要有四項任務,請參考下表。

工作 描述
請確認主機符合所有系統需求 主要包括網際網路存取、足夠的硬碟空間和支援的作業系統。
建立 SAS 安裝者之使用者帳號至主機中 透過 SAS 安裝者使用者部署 SAS 和套用更新。
增加 SAS 安裝者至主機中的 Windows 管理者群組 管理者群組的成員存取 SAS 部署精靈。
放置軟體訂單 E-mail 主要有二個重要的資訊,分別為 SAS 訂單編號和 SAS 安裝金鑰。

建立 SAS 軟體安裝檔

當我們在安裝 SAS 軟體之前,我們必須有 SAS Software Depot,所謂 SAS Software Depot 主要代表一個或多個訂單所組成 SAS 安裝檔案的檔案系統。我們主要會執行 SAS 下載管理員工具下載軟體訂單和建立 SAS Software Depot,稱之為電子軟體交付 (Electronic Software Delivery,ESD) ,請注意下載有次數限制,每次下載不完可恢復下載,但是 Hotfix 下載不完則只能透過 SAS 部署精靈重新下載,以及我們還可以透過實體媒體 DVD 掛載接著透過 SAS 部署精靈建立 SAS Software Depot,請注意若是採用實體媒體光碟請必須額外下載最新 Hotfix 才算完成當然我們也可以透過電子軟體交付製作實體媒體進行交付,但是在下載設定 SAS Software Depot 資料夾時,請勿勾選「刪除重複檔案和節省空間」選項以利完整製作實體媒體交付給客戶,至於其檔案系統的特定格式對於 SAS Software Depot 有特別意義,此外當我們建立 SAS Software Depot 完成之後就會使用 SAS Software Depot 檢查工具確認 SAS Software Depot 是否有效。

電子軟體交付 實體媒體
操作方式 網路下載 光碟製作
製作工具 SAS 下載管理員 SAS 部署精靈
檢查工具 SAS 軟體安裝檔檢查工具 SAS 軟體安裝檔檢查工具

安裝 SAS 軟體

當我們開始安裝 SAS Foundation 軟體之前,請先注意下述三件事項,分別為:

  1. 關閉所有 SAS 應用程式和停止所有執行中的 SAS 服務。
  2. 因為 SAS 管理下載員和 SAS 部署精靈會寫入許多相同的檔案,所以無法執行在相同時間。
  3. 請確認電腦連線可靠的電源,請注意若透過 SAS 部署精靈進行設定時被中斷時建議刪除之後進行重新設定。

接著我們透過執行 SAS 部署精靈開始進行安裝,主要步驟為:

  1. 請務必先確認完成前置安裝確認清單。
  2. 透過 SAS 安裝使用者帳號登入至伺服器中,請注意此帳號不能是暫存帳號,並且我們必需使用相同帳號進行增加、修改和移除 SAS 軟體。
  3. 開啟檔案總管切換至 SAS Software Depot 目錄,接著在「setup.exe」執行檔上按右鍵選擇「以系統管理員身分執行」開啟安裝程式。
  4. 選擇檢視語言為「繁體中文」,按下「確定」。
  5. 選擇部署工作,可分為一般使用者工作和管理員工作,若我們要安裝 SAS 軟體,則是屬於一般使用者工作,所以我們選點「安裝 SAS 軟體」,按下「下一步」。
  6. 指定 SAS 主目錄,建議為「C:\SASHome」,按下「下一步」。
  7. 選取要安裝的產品為「SAS Foundation 和相關的軟體」,建議不要修改任何預設選項,按下「下一步」。
  8. 選取 SAS Enterprise Guide 模式為「64 位元原生模式」,按下「下一步」。
  9. 選取 SAS Foundation 產品,按下「全部選取」,按下「下一步」,請注意。
  10. 指定 SAS 安裝資料檔,點選「瀏覽」,選取 SAS 安裝資料檔,也就是授權碼檔案,此時若授權碼檔案正確,則在下方會顯示詳細資料,主要有產品、平台、訂單、已授權的 SAS Foundation 數量和到期日,當我們確認到期日無誤之後,按下「下一步」。
  11. 選取支援的語言,按下「全部清除」,點選「繁體中文 (台灣)」,按下「下一步」,建議僅安裝需要的語言,否則將會浪費硬碟空間。
  12. 選取區域設定,主要是控制 SAS 軟體顯示文字、數字、貨幣、日期、時間值、排序資料的方式,請選擇「中文 (台灣) [zh_TW]」,按下「下一步」。
  13. 檢查系統,若是出現任何檔案代表有問題發生,此時請增加清單中檔案的存取權限和清除任何鎖定被影響的檔案,進行重新整理,直到檢查完成,按下「下一步」。
  14. 指定開啟 SAS 檔案類型使用的預設產品,選項有 SAS Foundation (64 位元) 和 SAS Enterprise Guide (64 位元),預設為 SAS Foundation (64 位元),也就是以 SAS 9.4 軟體開啟 「*.sas」等 SAS 相關檔案,按下「下一步」。
  15. 確認部署摘要之後,按下「開始」進行部署,若是有任何問題可以按下「上一步」返回之前設定畫面重新設定。
  16. 部署完成,確認所有元件皆成功完成之後,按下「下一步」。
  17. 最後按下「完成」,此時 SAS 軟體就已經部署完成。

驗證 SAS 部署

當我們完成 SAS 軟體部署時,建議執行執行 SAS IQ 安裝品質工具和 SAS OQ 營運品質工具驗證 SAS 部署,此外安裝錯誤可能的原因有三項,分別為:

  1. 損毀的安裝檔案,我們主要會透過 SAS 軟體安裝檔檢查工具評估 SAS 軟體安裝檔的完整性,若發現錯誤就必須重新下載進行修正。
  2. 不支援的作業系統環境,我們必須要查看適合作業系統的 SAS 系統需求,請注意 32 位元或 64 位元,以及 Linux 和 Windows 版本是否符合支援。
  3. 不滿足的系統需求,我們必須要查看適合作業系統的 SAS 系統需求,請確認 CPU 是否符合授權碼中的核心數,以及確認記憶體和硬碟空間是否滿足最低需求。

總結基本訂單安裝指引的官方文件主要提到部署 SAS Foundation 軟體主要有四大步驟,首先完成前置安裝確認清單,接著建立 SAS 軟體安裝檔,再來安裝 SAS 軟體最後驗證 SAS 部署,此外我們還可以開啟 SAS Document Viewer 9.4 繁體中文工具學習使用 SAS 軟體,以及透過 Renew SAS Software 9.4 工具定期更新金鑰

相關資源

SAS 基礎程式 (13)

教學目標

初步了解 SAS 基礎程式的自訂格式基本概念。

重點概念

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

所謂格式是指輸出變數所呈現的樣式,我們除了用系統內建的格式之外,像是 $w. 、yymmdd10.、comma10.2、…等預設格式,還可以透過 PROC FORMAT 敘述自訂格式,其中格式長度主要會以標籤中最長的文字為主。

自訂格式敘述

1
2
3
PROC FORMAT;
VALUE 格式名稱 開始 標籤;
RUN;

接著如何從資料集更新為永久格式,首先必須有三個變數 Start、Label 和 FmtName ,分別代表開始、標籤和格式名稱,通常針對資料集會搭配 RETAIN 和 RENAME 敘述以利提升處理效率。當我們產生具備 Start 、 Label 和 FmtName 三個變數的資料集之後,就可以透過下述 SAS 程式將資料集更新為永久格式。

永久格式敘述

1
2
PROC FORMAT CNTLIN=資料集;
RUN;

再來我們會再透過 PROC FORMAT 敘述查看永久格式的內容是否正確,請參考下述 SAS 程式。

查看格式資訊敘述

1
2
3
PROC FORMAT LIBRARY=WORK.FORMATS FMTLIB ;
SELECT 資料集;
RUN;

以及我們還可透過 PROC CATALOG 敘述查看資料集的格式資訊。

1
2
3
PROC CATALOG CAT=函式庫.資料集;
CONTENTS;
QUIT;

此外在 SAS 中可以有巢狀格式,請注意格式會有相依關係,其中長度預設為 40。

可是如何開始使用格式,SAS 主要會先找是否為預設格式,接著找 WORK.FORMATS ,再來找LIBRARY.FORMATS ,若還找不到就不找了,所以若直接使用會發生錯誤。為了解決此問題,首先我們會透過 OPTIONS NOFMTERR; 敘述告訴 SAS 若不是預設格式或在 WORK.FORMATS 中則不要顯示錯誤,正常執行,預設為 OPTIONS FMTERR 。最後我們要透過 OPTIONS FMTSEARCH=(資料館1, 資料館2); 敘述告訴 SAS 可以從哪裡找自訂格式。

最後我們要如何管理格式,主要會透過下述 SAS 程式,當匯出格式為 SAS 資料集就能夠進行格式更新為永久格式,請注意若不指定就存在 WORK.FORMATS ,直到工作結束。

匯出格式

1
2
3
4
PROC FORMAT LIBRARY=LIBREF.CATALOG 
CNTLOUT=資料集;
SELECT 格式名稱;
RUN;

總結在商業分析中我們可以透過自訂格式的方式針對資料有不同的解釋,同時在不影響資料的情況下,直接輸出呈現至報表中,因此透過自訂格式將能夠讓我們呈現出各式各樣不同類型的報表欄位呈現方式,請注意當 FORMAT 敘述用在 DATA STEP 中時則是建立清單報表時指定格式,僅有在 PROC STEP 中當成程序時才是建立和應用自訂格式。

相關資源

SAS 基礎程式 (12)

教學目標

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

重點概念

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

所謂陣列是指暫時性的群組,必須要指定陣列名稱,必須全部文字或全部數值格式,只存在於 DATA STEP 中執行,此外陣列不是變數。

陣列敘述格式

1
ARRAY 陣列名稱 {個數} <$> <長度> <陣列元素>;

表示方式一

1
ARRAY Var{5} Var1-Var5;

表示方式二

1
ARRAY Var{*} Var1-Var5;

表示方式三

1
ARRAY Var{*} Var1--Var5;

表示方式四

1
ARRAY Var{*} Var:;

表示方式五

1
ARRAY Var{5}

其中 { } 也可以用大括號、中括號和小括號, {個數} 必須和陣列元素個數需要相同,否則會在編譯期間發生錯誤,以及陣列無法應用於編譯期間執行的敘述,像是 KEEP、DROP、…等敘述。此外定義陣列時不需要相似和相鄰,也能夠指定為陣列中的元素,

接著表示方式一至表示方式四主要會對應已存在的變數,而表達方式五則會因為在 PDV 中找不到變數而產生新的變數,同時設定預設值為 0,分別命名為 Var1、Var2、Var3、Var4 和 Var5,同時陣列初始值會保留至 PDV 中不會重新啟始空白或 0。

再來陣列也可以應用於加總函數中,以及透過 DIM 函數主要是回傳元素的個數,例如 DIM(Var) 的結果為 5,此外每個陣列變數預設為數值格式和長度為 8,至於 { } 括號中的變數還可以進行四則運算。

最後我們常常會在資料處理的過程中使用陣列,但是當處理完成之後就需要將陣列所產生的變數刪除,此時除了透過 DROP 敘述之外,還可以透過 TEMPORARY 選項宣告暫時性的變數欄位。

表示方式一

1
ARRAY Temp_Var{5} _TEMPORARY_(0,0,0,0,0);

表示方式二

1
ARRAY Temp_Var{5} _TEMPORARY_(0 0 0 0 0);

總結在 SAS 中的陣列宣告與使用方式相較於其它程式語言非常有彈性,主要就是將陣列指標和變數分別對應,但是請注意不能文字和數值變數同時用,一定要所有變數皆為文字,或者所有變數皆為數值。

相關資源

SAS 基礎程式 (11)

教學目標

初步了解 SAS 基礎程式如何有效透過 DO-LOOP 迴圈敘述進行重複的例行作業。

重點概念

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

在實務應用中我們經常會需要進行重複的例行作業,此時我們就會透過 DO-LOOP 迴圈敘述進行重複的例行作業,以利提升 SAS 程式的可讀性。首先我們試想客戶需要了解每年和每季存款中本金加利息的情境,假設存款有五十萬,銀行利率為 1%,請參考下述 SAS 程式。

1
2
3
4
5
6
7
8
9
10
11
DATA deposit;
AMOUNT=500000;
RATE=0.01;
Yearly+(Yearly+Amount)*Rate;
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
RUN;
PROC PRINT DATA=deposit;
RUN;

輸出結果

Obs Amount Rate Yearly Quarterly
1 500000 0.01 5000 5018.78

但是上述程式若要計算三年就會需要撰寫三次 Yearly = Amount × Rate; 敘述和十二次 Quarterly + (( Quarterly + Amount ) × Rate / 4); 敘述,此時我們就可以使用 DO-LOOP 迴圈敘述,請參考下述 SAS 程式。

1
2
3
4
5
6
7
8
9
10
11
12
13
DATA deposit;
AMOUNT=500000;
RATE=0.01;
DO n=1 TO 3;
Yearly+(Yearly+Amount)*Rate;
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
END;
RUN;
PROC PRINT DATA=deposit;
RUN;

輸出結果

Obs Amount Rate n Yearly Quarterly
1 500000 0.01 4 15150.5 15207.98

接著我們就先了解 DO-LOOP 迴圈敘述格式。

1
2
DO 索引變數=開始 TO 停止<BY 增量>;
END;

其中請注意 DO-LOOP 迴圈中的索引變數會輸出為變數,增量預設為 1 ,索引變數預設會輸出為變數,當遇到 END 時會先進行增量,因此若我們停止設為 3 ,但因為增量所以最後索引變數值為 4,並且當初始化 PDV ,執行讀取敘述時會判斷 EOF 註記是否結束,若結束就停止,若沒有就執行敘述,請參考下述 SAS 程式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DATA deposit;
AMOUNT=500000;
RATE=0.01;
DO n=1 TO 3;
Yearly+(Yearly+Amount)*Rate;
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
OUTPUT;
END;
RUN;
PROC PRINT DATA=deposit;
RUN;

輸出結果

Obs Amount Rate n Yearly Quarterly
1 500000 0.01 1 5000.0 5018.78
2 500000 0.01 2 10050.0 10087.94
3 500000 0.01 3 15150.5 15207.98

再來我們還有兩種執行 DO-LOOP 迴圈的使用方式,分別為 UNTIL 和 WHILE,所謂 UNTIL 主要是滿足條件才停止,而所謂 WHILE 主要是滿足條件才執行,請注意 DO UNTIL 是先執行再判斷條件,所以一定會執行一次,DO WHILE 是先判斷條件再執行,所以不一定會執行一次,此外 DO-LOOP 可以使用 TO 和 UNTIL 與 TO 和 WHILE 條件同時使用,會先看哪個條件先符合就停止,然而 DO-LOOP 可能會需要更進階的方式判斷,此外我們會透過 LEAVE 敘述的方式避免無窮迴圈。此外請注意在 DO-LOOP 中記得加上 OUTPUT 才能夠輸出每筆觀察值,請參考下述 SAS 程式。

DO-LOOP 迴圈 SAS 程式 (WHILE )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA deposit;
AMOUNT=500000;
RATE=0.01;
DO WHILE (n<3);
n+1;
Yearly+(Yearly+Amount)*Rate;
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
OUTPUT;
END;
RUN;
PROC PRINT DATA=deposit;
RUN;

DO-LOOP 迴圈 SAS 程式 (UNTIL)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA deposit;
AMOUNT=500000;
RATE=0.01;
DO UNTIL (n>=3);
n+1;
Yearly+(Yearly+Amount)*Rate;
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
OUTPUT;
END;
RUN;
PROC PRINT DATA=deposit;
RUN;

DO-LOOP 迴圈 SAS 程式 (LEAVE)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DATA deposit;
AMOUNT=500000;
RATE=0.01;
DO;
n+1;
IF (n=3) THEN LEAVE;
Yearly+(Yearly+Amount)*Rate;
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
Quarterly+((Quarterly+Amount)*Rate/4);
OUTPUT;
END;
RUN;
PROC PRINT DATA=deposit;
RUN;

輸出結果

Obs Amount Rate n Yearly Quarterly
1 500000 0.01 1 5000.0 5018.78
2 500000 0.01 2 10050.0 10087.94
3 500000 0.01 3 15150.5 15207.98

最後我們還能夠透過巢狀 DO-LOOP 迴圈敘述簡化 SAS 程式,提高可讀性,簡單來說就是 DO-LOOP 迴圈敘述中又有 DO-LOOP 迴圈敘述,其中每個層迴圈會有各自的索引值,增量不一定要相同,請參考下述 SAS 程式。

1
2
3
4
5
6
7
8
9
10
11
12
13
DATA deposit;
AMOUNT=500000;
RATE=0.01;
DO y=1 TO 3;
Yearly+(Yearly+Amount)*Rate;
DO q=1 TO 4;
Quarterly+((Quarterly+Amount)*Rate/4);
OUTPUT;
END;
END;
RUN;
PROC PRINT DATA=deposit;
RUN;

輸出結果

Obs Amount Rate y Yearly q Quarterly
1 500000 0.01 1 5000.0 1 1250.00
2 500000 0.01 1 5000.0 2 2503.13
3 500000 0.01 1 5000.0 3 3759.38
4 500000 0.01 1 5000.0 4 5018.78
5 500000 0.01 2 10050.0 1 6281.33
6 500000 0.01 2 10050.0 2 7547.03
7 500000 0.01 2 10050.0 3 8815.90
8 500000 0.01 2 10050.0 4 10087.94
9 500000 0.01 3 15150.5 1 11363.16
10 500000 0.01 3 15150.5 2 12641.57
11 500000 0.01 3 15150.5 3 13923.17
12 500000 0.01 3 15150.5 4 15207.98

總結在 SAS 中的 DO-LOOP 迴圈非常實用,但是我們需要深入了解 WHILE 和 UNTIL 使用方式的差別,簡單來說 WHILE 不一定會執行一次,只有當條件符合才會繼續,UNTIL 一定會執行一次,只有當條件符合才會停止。之後就能透過 DO-LOOP 迴圈敘述進行重複的例行作業,以利簡化 SAS 程式,同時提高可讀性。

相關資源

SAS 基礎程式 (10)

教學目標

初步了解 SAS 基礎程式如何進行變數類型自動轉換或手動轉換。

重點概念

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

一般來說,研究人員針對收集的數據資料進行統計分析時,會遇到許多問題,針對遺漏值可以透過統計運算和數值計算相關函數解決此問題之外,在 SAS 中針對不同型態的變數會進行自動轉換,至於資料集中哪些變數是什麼類型,我們主要可以透過 SAS 程式 PROC CONTENTS DATA=資料集名稱; RUN; 在結果檢視器中按字母排序的變數與屬性清單中查看變數類型。

首先型態轉換主要可以分為自動轉換和手動轉換,簡單來說,若是要轉換為數值變數,則會使用 INPUT 函數,反之若是要轉換為文字變數,則會使用 PUT 函數,請注意若我們在 SAS 使用文字加上數字將會自動將文字轉換為數字,這部份與其它程式語言不同,例如:若敘述為 X=”123” + 456 ; 則 X 的結果為 579 。

接著針對數值自動轉換主要會發生在指定數值變數、四則運算、邏輯運算、使用函數時,請注意在 WHERE 敘述不具備有自動轉換的功能,自動轉換預設 w. 的輸入格式,所以當轉換失敗時,就會變成遺漏值。其中主要使用 INPUT 函數,其格式為 INPUT(來源文字,輸入格式)。

再來針對文字自動轉換主要會發生在指定文字變數,使用 || 和 !! 連接符號進行連接處理時,但要注意數字轉文字會有前面空白的問題發生,至於當發生自動轉換時 CAT 會自動移除前面空白,因此我們可以透過 CAT 函數避免數值轉文字前產生空白的問題,此外還需要特別注意數值轉文字其預設長度為 8。其中主要使用 PUT 函數,其格式為 PUT(文字,輸出格式)。

總結 INPUT 函數主要是轉換為數字,PUT 函數主要是轉換為文字,此外請注意因為變數格式在編譯期間就決定類型格式,所以無法在執行期間改變格式,因此若要改變變數格式,則需要透過 RENAME 選項將原始變數名稱重新命名之後,再重新指定原先的變數名稱,最後再刪除重新命名變數名稱,請注意 INPUT/PUT 敘述和 INPUT/PUT 函數用途不一樣,敘述主要是讀取或寫入資料,而函數則是轉換數值或文字資料。

相關資源