2.19臨時和永久數據集
SAS臨時數據集只在目前工作或會話中存在,關閉SAS或結束工作時則刪除;永久數據集當關閉SAS或結束工作時仍然存在。
SAS數據集名所有的SAS數據集都有用句號分開的兩層數據集名,如work.a。第一層前綴work是邏輯庫名,第二層是在邏輯庫中用于辨別自己的成員名。
名字的規則是,以字母或下劃線開頭,并且名字中只能包含字母、數字和下劃線。而且,庫名不能超過8個字節,而成員名卻可以達到32個字節。大部分數據集通過數據步創建,過程步也可以創建。如果指定了一個前綴不為work的兩層數據集名,則這個數據集就是永久的。如果不指定前綴,則默認數據集是臨時的,自動分配到work邏輯庫中。下面是一些數據集名,對于的邏輯庫,成員名,類型:
臨時數據集 如下的程序創建并打印了一個名為DISTANCE的永久數據集:
這里,只指定了成員名distance,自動分配到work庫中,日志窗口中有說明:
NOTE:The data setWORK.DISTANCEhas 1 observati ons and 2 vari abl es.
永久數據集可以在資源管理器窗口中定義一個新庫使用:
也可以通過如下程序:
那么日志窗口就會出現如下說明:
NOTE:The data setMYLIB.DISTANCEhas 1 observati ons and 2 vari abl es.
這是一個永久數據集,因為前綴不是work。
2.20?用LIBNAME語句使用永久數據集
LIBNAME語句的基本形式為:LIBNAME libref’your-SAS-data-library’;
LIBNAME的后面,需要指定庫名和存放的路徑,在個人操作環境下LIBNAME語句的基本形
式為:
創建永久數據集如下的例子創建了一個永久SAS數據集,包含了magnolia trees的一些信息。每一種樹,原始文件都包含它的科學名、普通名、最大高度、第一次開花的年齡、是evergreen還是deciduous、以及花的顏色。
下面的代碼將會創建一個PLANTS的邏輯庫,路徑為C盤下的MySASLib。然后從原始文件Mag.dat中讀取數據,并創建一個名為MAGNOLIA的永久數據集,存在PLANTS庫中。
日志窗口會出現如下說明:
NOTE:The data setPLANTS.MAGNOLIAhas 5 observati ons and 6 vari abl es.
如果在電腦中打印文件的地址目錄,會發現文件名不是PLANTS.MAGNOLIA。這是因為操作系統有自己對文件命名的方式,這個文件,在Windows,UNIX,和OpenVMS操作環境中名字為magnolia.sas7bdat,在OS/390或者z/OS環境中,文件名就會如LIBNAME語句中定義的data-set-name形式。
讀取永久數據集如果你想打印出上例中創建的數據集,可以用如下語句:
這次LIBNAME語句中的庫名為example,但缺失同樣路徑,邏輯庫名可以改變,但成員名MAGNOLIA卻一樣。輸出如下:
2.21通過直接指代使用永久數據集
可以通過直接指代來使用SAS數據集,且不需要自己定義,SAS為你做好。
直接指代,依據系統不同,使用方法也不同,如下:
可以看到,一些系統的語句中需要指出路徑,但如果遺漏了路徑,SAS自動使用當前路徑,比如這樣一個創建名為trees的永久數據集的代碼:
DATA ‘trees ’;
UNIX和OPENVMS操作環境下,當前的路徑默認為啟動SAS的路徑,可以通過工具(TOOLS)下拉菜單的選項(OPTIOPN)菜單來改變這種默認,windows環境下當前路徑會顯示在SAS窗口底部。可以通過雙擊這個路徑來改變默認。
例子如下還是關于magnolia trees的這個例子,
下面的代碼將從原始文件mag.dat中讀取數據,創建一個名為MAGNOLIA的永久數據集,存放在C盤的Mysaslib路徑中:
相應的輸出窗口顯示如下:
NOTE:The data set c:\MySASLi b\magnol i a has 5 observati ons and 6 vari abl es.
如果打開MySASLib文件夾,會發現一個名為magnolia.sas7bdat的文件。在沒指定庫的情況下,SAS會自動為你創建一個庫,在資源管理器窗口中可以看到,下圖是SAS為magnolia創建的庫。
用直接指代讀取SAS數據集 可以直接用引號+路徑的方式讀取永久數據集,比如打印magnolia數據集可以:
2.22列出SAS數據集目錄
由于SAS是自文檔化,即在自動儲存了數據集的信息,因此可以通過contents過程來查看SAS數據集的描述。
Proc contents data=data -set
如果遺漏了data=的語句,SAS自動列出最近創建的數據集
例子 如下的程序創建了一個數據集,并且使用proc contents。數據步中使用了label語句,label語句為變量打上標簽,并儲存在數據集中,在打印時會顯示。過程步中也可以使用label,但只在proc contents中有效,不會儲存在數據集中。Informat和format可以指定信息和格式,儲存在數據集中,也可以在過程步中使用,但不儲存在數據集中。
輸出如下: