SAS Studio

SAS 基本介紹 (29)

教學目標

初步了解如何免費使用 SAS University Edition 撰寫 SAS 程式的基本概念。

重點概念

首先我們皆知道 SAS 是付費軟體,但事實上 SAS 已經有提供給學術研究使用的版本,也就是「SAS® University Edition」,這版本主要是在本機電腦以「Oracle VM VirtualBox」掛載 Linux Redhat 虛擬機器的方式自動啟動 SAS Studio 網站應用程式伺服器,以利我們透過瀏覽器連線至「http://localhost:10080」開始練習 SAS 程式的撰寫。

接著我們如何開始呢?主要有五個步驟,分別為:

  1. 透過 SAS 官方網站下載「SAS University Edition 」的「unvbasicvapp__XXX.ova」虛擬機器檔案。
  2. 透過 Oracle 官方網站下載安裝「Oracle VM VirtrualBox」工具檔案,接著進行安裝。
  3. 開啟「Oracle VM VirtrualBox」工具,點選「檔案」->「匯入應用裝置」,然後點選「unvbasicvapp__XXX.ova」虛擬機器檔案,按下「下一步」->「匯入」。
  4. 點選「SAS University Editon」,按下「啟動」,當出現「Welecome to your SAS University Edition Virtual Application」之後,就能夠開啟瀏覽器輸入「http://localhost:10080」開啟「SAS University Edition Virtual Application」網站。
  5. 點選「啟動 SAS Studio」或「啟動 Jupyter Notebook」就能夠開始透過本機電腦撰寫 SAS 程式。

再來若我們使用 Windows 10 作業系統啟動「SAS University Editon」虛擬機器時,發生「VT-x is not available (VERR_VMX_NO_VMX).」的錯誤訊息,則請開啟「Windows PowerShell」執行以下指令,就能夠解決此問題。

1
> dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

最後若我們要撰寫程式除了能夠輸入「http://localhost:10080/SASStudio」網址開啟「SAS Studio」應用程式網站之外,更能夠輸入「http://localhost:18888/」網址開啟「Jupyter Notebook」應用程式網站。若你是新手則我個人建議使用「SAS Studio」應用程式網站,因為有提供視覺化的操作介面方便探索資料來源和產生範例程式,但若之前使用過 Python 習慣「Jupyter Notebook」中一段一段的操作方式,則建議使用「Jupyter Notebook」應用程式網站。

相關資源

SAS Viya (6)

教學目標

初步了解 SAS Viya 平台中如何透過 SAS Studio 建立工作階段連線至雲端分析服務。

重點概念

基本介紹

在 SAS 的雲端分析服務中,工作階段通常被使用允許客戶與伺服器進行溝通以利進行請求的動作,因為 Viya 主要是分散式伺服器架構,所以工作階段主要分成工作階段 Controller 和工作階段 Worker,基本上工作階段 Controller 僅有一個,而工作階段 Worker 會有很多個,每個工作階段會對應唯一的 UUID,此外在 SAS Studio 中我們會透過 CAS 敘述建立工作階段,當我們連接 CAS 伺服器,伺服器在建立工作階段程序會驗證使用者憑證,預設工作階段只有自己看得看,但是透過 global 關鍵字則是所有資源皆可以使用工作階段,而 session-local 關鍵字則是描述本機工作階段資源。

當我們開啟 SAS Studio 進行登入之後,我們必須透過 CAS 敘述建立工作階段,以利連線至 CAS 伺服器,其中 CAS 敘述的格式為:

1
CAS 工作階段名稱 <選項>;

接著我們將會產生工作階段的請求,請求主要會建立資源,建立新的資料和使用者定義格式,再來伺服器上的請求任務主要是由使用者執行,此外我們還可以透過 CAS 敘述更新和列出工作階段的選項、列出有關工作階段的資訊、管理使用者定義函式庫的格式和搜尋函式庫的格式、中斷連線或終止工作階段。

執行階段

雲端分析服務工作階段動作請求和回應,主要有五個階段,分別為:

  1. 新的 CAS 工作階段。
  2. 執行多個請求和回應動作。
  3. 中斷連線 CAS 工作階段。
  4. 重新連線 CAS 工作階段。
  5. 終止 CAS 工作階段。

實機操作

新的 CAS 工作階段

最後我們開始進行實作,請開啟 SAS Studio 登入使用者,首先點選左方區塊中的「程式碼片段」頁籤「程式碼片段」,接著點選「程式碼片段」->「雲端分析服務」->「新的 CAS 工作階段」,此時在右方區塊中的「程式碼」將會顯示下述程式碼。

SAS 程式碼

1
cas mySession sessopts=(caslib=casuser timeout=1800 locale="en_US");

接著按下上方的「小人物」執行程式碼。

執行結果

1
2
3
4
5
6
7
NOTE: The session MYSESSION connected successfully to Cloud Analytic Services www.domain.com using port 5570. The UUID is 
7435d83a-fade-7244-82fe-e25df847cc07. The user is sasdemo01 and the active caslib is CASUSERHDFS(sasdemo01).
NOTE: The SAS option SESSREF was updated with the value MYSESSION.
NOTE: The SAS macro _SESSREF_ was updated with the value MYSESSION.
NOTE: The session is using 4 workers.
NOTE: 'CASUSER(sasdemo01)' 現在是使用中 caslib。
NOTE: The CAS statement request to update one or more session options for session MYSESSION completed.

中斷連線 CAS 工作階段

SAS 程式碼

1
2
cas mySession sessopts=(timeout=1800);    
cas mySession disconnect;

執行結果

1
2
NOTE: The CAS statement request to update one or more session options for session MYSESSION completed.
NOTE: Request to DISCONNECT completed for session MYSESSION.

重新連線 CAS 工作階段

SAS 程式碼

1
cas mySession reconnect;

執行結果

1
NOTE: Request to RECONNECT completed for session MYSESSION.

終止 CAS 工作階段

1
cas mySession terminate;

執行結果

1
2
NOTE: Deletion of the session MYSESSION was successful.
NOTE: Request to TERMINATE completed for session MYSESSION.

列出 CAS 工作階段選項

SAS 程式碼

1
cas mySession listsessopts;

執行結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
NOTE: Name = appTag                
UsageType = Session
Type = String
Value =
Default Value =
Group = Action
Min = 0
Max = 0
NOTE: Name = caslib
UsageType = Session
Type = String
Value = CASUSER(sasdemo01)
Default Value =
Group = Caslib
Min = 0
Max = 0
NOTE: Name = cmpopt
UsageType = Session
Type = String
Value =
Default Value =
Group = CMP
Min = 0
Max = 0
NOTE: Name = collate
UsageType = Session
Type = String
Value = UCA
Default Value = UCA
Group = Sort
Min = 0
Max = 0
NOTE: Name = dataStepFmtErr
UsageType = Session
Type = Boolean
Value = 1
Default Value = 1
Group = DATA Step
Min = 0
Max = 1
Description = when set to True, the DATA step generates an error when a variable format cannot be found. You can set this
parameter to False to continue processing instead of generating an error.
NOTE: Name = dataStepMsgSumLevel
UsageType = Session
Type = String
Value = ALL
Default Value = ALL
Group = DATA Step
Min = 0
Max = 0
NOTE: Name = dataStepReplaceTable
UsageType = Session
Type = Boolean
Value = 1
Default Value = 1
Group = DATA Step
Min = 0
Max = 1
NOTE: Name = dqLocale
UsageType = Session
Type = String
Value =
Default Value =
Group = Data Quality
Min = 0
Max = 0
NOTE: Name = dqSetupLoc
UsageType = Session
Type = String
Value =
Default Value =
Group = Data Quality
Min = 0
Max = 0
NOTE: Name = eventds
UsageType = Session
Type = String
Value =
Default Value =
Group = Input Control
Min = 0
Max = 0
NOTE: Name = fmtcaslib
UsageType = Session
Type = String
Value = FORMATS
Default Value = FORMATS
Group = Formats
Min = 0
Max = 0
NOTE: Name = intervalds
UsageType = Session
Type = String
Value =
Default Value =
Group = Input Control
Min = 0
Max = 0
NOTE: Name = locale
UsageType = Session
Type = String
Value = en_US
Default Value = en_US
Group = Localization
Min = 0
Max = 0
NOTE: Name = logFlushTime
UsageType = Session
Type = Integer
Value = 100
Default Value = 100
Group = Log
Min = -1
Max = 86400
NOTE: Name = maxTableMem
UsageType = Session
Type = Integer
Value = 16777216
Default Value = 16777216
Group = Caslib
Min = 0
Max = 0
NOTE: Name = messageLevel
UsageType = Session
Type = String
Value = all
Default Value = all
Group = Log
Min = 0
Max = 0
NOTE: Name = metrics
UsageType = Session
Type = Boolean
Value = 0
Default Value = 0
Group = Log
Min = 0
Max = 1
NOTE: Name = nWorkers
UsageType = Session
Type = Integer
Value = 4
Default Value = 0
Group = Session
Min = 0
Max = 5000
NOTE: Name = subsetSessionCopies
UsageType = Session
Type = Integer
Value = 0
Default Value = 0
Group = Session
Min = 0
Max = 5000
NOTE: Name = timeZone
UsageType = Session
Type = Integer
Value = -1
Default Value = -1
Group = Session
Min = -1
Max = 23
NOTE: Name = timeout
UsageType = Session
Type = Integer
Value = 1800
Default Value = 60
Group = Session
Min = 0
Max = 31536000
NOTE: Request to LISTSESSOPTS completed for session MYSESSION.

列出 SAS 用戶端的 CAS 工作階段

SAS 程式碼

1
cas _all_ list;

執行結果

1
2
NOTE: Session MYSESSION is ACTIVE using port 5570 and host www.domain.com for user sasdemo01. The session UUID is 
6ecf1c62-d669-0743-ab42-bb921eae42b8.

列出使用者 ID 的 CAS 工作階段

SAS 程式碼

1
cas mySession listsessions;

執行結果

1
2
3
4
5
6
7
8
9
10
11
12
13
NOTE: LISTSESSIONS lists information about sessions known to Cloud Analytic Services. Sessions can be created with the CAS 
statement.
NOTE: SessionName = SASVisualDataBuilder:Wed Sep 6 10:30:31 2017
UUID = 3e1c509a-8b5e-f841-9721-961e1556666b
State = Connected
Authentication = OAuth
Userid = sasdemo01
NOTE: SessionName = MYSESSION:Wed Sep 6 14:11:17 2017
UUID = 6ecf1c62-d669-0743-ab42-bb921eae42b8
State = Connected
Authentication = OAuth/External PAM
Userid = sasdemo01
NOTE: Request to LISTSESSIONS completed for session MYSESSION.

更改 CAS 工作階段的選項

SAS 程式碼

1
2
3
cas mySession SESSOPTS=(locale=zh_tw); run;
%put locale=%sysfunc(getsessopt(mySession,locale)); run;
cas mySession LISTHISTORY;

執行結果

1
2
3
4
5
6
7
NOTE: The CAS statement request to update one or more session options for session MYSESSION completed.
NOTE: 1: action listSessOpts / debug=true
; /* (SUCCESS) */

NOTE: 2: action setsessopt / caslib='CASUSER(sasdemo01)', locale='en_US', timeout=1800; /* (SUCCESS) */
NOTE: 3: action listSessOpts / ; /* (SUCCESS) */
NOTE: 4: action setsessopt / locale='zh_tw'; /* (SUCCESS) */
NOTE: 5: action getsessopt / name='locale'; /* (SUCCESS) */
NOTE: Request to LISTHISTORY completed for session MYSESSION.

總結若我們開始要透過 SAS Studio 存取 SAS Viya 雲端分析服務,則第一步就是要建立 CAS 工作階段,若是突然忘記 SAS 程式碼如何撰寫,則可以透過 SAS Studio 中的「程式碼片段」自動載入對應任務的 SAS 程式碼。

相關資源

SAS 基本介紹 (2)

基本介紹

教學目標

初步了解 SAS Studio 基本操作。

重點概念

首先請先至SAS 官網,點選「Get free software」,接著點選雲端項目中的「Launch now」,再輸入基本資料之後,根據官方文件快速建立 SAS University Edition 雲端伺服器 (建議先產生專屬 Key Pair)。

等待伺服器完整啟動之後,開啟 AWS Marketplace 點選「Access Software」,當網站開啟之後請先輸入帳號與密碼 (帳號: sasdemo,密碼: [Instance ID]),此時請點選「啟動 SAS Studio」開始使用。

最後如何開始使用則可以參考官網十分鐘教學,不僅可以透過 SAS Code 的方式進行客制查詢之外,更能夠透過設定查詢自動產生 SAS Code ,接著按下執行鈕即可立即進行查詢,更進一步產生圖表資訊,如下圖所示。

SAS Studio 透過操作產生圖表

(註: 當不練習時可先透過 AWS 主控台停止 SAS University Edition 雲端伺服器,等要練習時再透過 AWS 主控台重新啟動。)

相關資源