資料集 & 資料館
組成:資料集>資料館
資料館能用來容納許多資料集,資料館可以是SAS檔案也可以是來自其他資料庫的檔案
Contents
資料集 – Dataset
這邊所講的資料集都是指SAS Dataset,而它又可以分為兩種類型,分別是SAS File與SAS Views:
※補充:SAS Dataset VS External Dataset
SAS Dataset
SAS能辨別、格式化紀錄資料的資料集
例:SAS File、SAS Views
External Dataset
不屬於SAS DAtaset的資料都屬於External Dataset
例:Csv, Txt等
SAS File
一般我們最常接觸與使用的就是SAS File,也是在本機見到的實體檔案,這個檔案包含觀察值、資料集與變數屬性(Descriptive information)。
依照檔案是否格式化分為2種:
Native SAS Data file
以SAS格式儲存的檔案,副檔名為.sas7bdat
Interface SAS Data file:
非以SAS格式儲存的檔案,比如DB2、SPSS等其他類型,當連結資料館後,SAS會將該類檔案識別為Native SAS Data file
SAS View
指向某個資料集的虛擬資料集。
簡單來說,是用來連結、查詢某個資料集,僅紀錄著資料集與變數屬性。
在使用上與SAS File無太大差異,差別在於SAS View並不會將實際觀察值儲存到資料集之中。
資料集命名規則
- 需以英文字母或底線開頭,大小寫不拘
- 後面可以是英文字母、底線或數字混合
- 長度最大為32 Bytes
- 不可使用_NULL_、_DATA_、_LAST_命名,這些屬於SAS資料集的保留名稱
資料館 – Library
包含資料集的一個集合,依照性質可以分為永久資料館與暫時資料館
☀
永久資料館
就是會一直存在的資料館(OK,有講等於沒講…)
每一次關閉SAS時,並不會影響到存放在永久資料館的資料集,因為永久資料館指向的是實體路徑與該路徑下的資料集。
但下次開啟SAS時會發現資料館不見,這時候只需要再重新連結相同路徑的資料館就OK了!
☂
暫時資料館
SAS暫時建立的資料館
每當我們打開一個SAS時(稱之為session),系統會自動生成一個暫時資料館,命名為WORK。
當我們關閉SAS時,WORK這個暫時資料館裡面的資料集並沒有真正的被儲存到實體路徑,雖然下次打開SAS時還是會看到WORK,但此時的WORK已經不是上次的WORK。
如何建立與連結資料館?
這邊分享兩種語法來連結資料館,分別是Libname敘述句與SQL的Connect to方法,實際上的細節仍然需要依照所關聯的資料集與環境來進行調整。
Libname敘述句
Libname Test "physical-path";
將SAS資料館與實體路徑的SAS資料集進行關聯或是取消關聯。
簡單來說就是搭一座橋,讓兩邊可以互通。
可以藉由調整參數決定要關聯前面所提告的Native SAS Data file或是Interface SAS Data file。
上面這是一段最簡單的Libname敘述句,用來關聯實體路徑下的Native SAS Data file。
SQL Pass-Through Facility – Connect to
Proc SQL;
connect to Oracle as ORI
(user=Admin pw=test123 path="Test" connection=global);
quit;
Connect to與Libname敘述句的差別在於它只能關聯存放Interface SAS Data file的實體路徑,而不能關聯Native SAS Data file。
上方這一段是用來關聯Oracle的簡單語法:
- 第1、4行:因為此語法為Proc SQL中的一環,所有這2行是必須的
- 第2~3行:後半段因關聯的資料庫與環境而異,需要填入不同參數
資料館命名規則
- 需要以英文字母或底線開頭,大小寫不拘
- 後面可以是英文字母、底線、數字混合
- 長度最大為8 Bytes
- 不可使用sashelp、sasmsg、sasuser、work,這些為SAS資料館的保留名稱
資料集與資料館命名結構
前面介紹了資料館與資料館,最後就來介紹它們的命名結構吧!
SAS資料集是由3個命名層級構成的,分別是Library、Dataset、Member Type,中間以「點(DOT)」間隔
相信大家現在對於Library、Dataset已經有相當的瞭解了,那麼Member Type是什麼呢?
其實它是SAS一種內建用來辨別的標籤,判斷這個資料集屬於哪一種類型。
常見的有:Data、View、CATALOG、INDEX等。
但一般來說我們在程式碼使用Dataset時,不需要特別寫上Member Type這個層級,在特殊場合下才會使用到。
如果是使用資料集的資料時,只需要寫出Library與Dataset這2個層級就好。
One-Level Names
僅由Dataset所組成的命名
其實它骨子是Two-Level Names,Library是WORK暫時資料館
Two-Level Names(WORK)
與上面寫法有相同的結果,兩種都適用
Two-Level Names
由Library與Dataset所組成的命名
當使用大量不同的資料館時,建議都以Two-Level Names命名,能有效辨別程式中不同區塊所使用的資料館
參考資料:
謝謝閱讀這篇文章,有問題歡迎在下方留言