SAS數據集


  SAS數據集是存儲在SAS邏輯庫中、由SAS創建和處理的SAS文件,是SAS存儲數據的主要方式。SAS數據集包含以表的觀測(行)和 變量(列)為形式存在的數據值,以及用以描述變量類型、長度和創建該數據集時所使用的引擎等信息的描述信息。根據其是否包含真正的數據值,SAS數據集可分為SAS數據文件和SAS視圖。SAS數據文件包含 數據和描述信息,在邏輯庫中的成員類型是DATA;而SAS視圖不包含 數據值,是指向其他數據源的虛數據集,成員類型是VIEW。下面分別 介紹SAS數據集的文件內容、命名,各種SAS數據文件和SAS視圖,以 及它們的創建方式。

1.數據集文件

下面來具體看看上圖中的各個組件。

  1. ·描述信息:描述了SAS數據集自身及其變量的屬性,包括觀測數、 觀測長度、該數據集上次的修改日期等其他信息。其變量的描述信息包 括名稱、類型、長度、輸入輸出格式、標簽,以及是否已經為該變量建 立索引等屬性。
  2. ·數據值:以矩形表的形式排列。一個數據集可包含若干個觀測(也稱為行),每個觀測通常由一個或多個變量(也稱為列)值組成。
  3. ·索引:是單獨的SAS文件,可以為SAS數據文件創建索引,以提供 對指定觀測的直接訪問。索引文件與其數據文件有着相同的名稱,但成員類型為INDEX。索引可提供對指定觀測更快的訪問,尤其是對較大的數據集而言。
  4. ·擴展屬性:是定義在數據集或變量之上的元數據。擴展屬性使用DATASETS過程創建,表示為<名稱-值>對。

 下面以一個簡單的SAS數據集為例,來理解數據集的描述信息、觀測和變量。

SAS窗口提交如下代碼生成數據集:

libname  saslib  'c:\sas\data';
data  saslib.Inventory;
input  Product_ID  $  Instock  Price;
datalines; P001R   12   125.00
P003T  34   40.00
P301M  23   500.00
PC02M  12   100.00
;
run;

使用CONTENTS過程打印數據集的屬性信息,代碼如下:

proc  contents  data=saslib.inventory;
run;

CONTENTS過程生成的結果如圖2.3所示。其中包含了上面提到的 數據集信息、主機相關信息和變量信息等。

 

圖2.3 數據集描述信息輸出 

提交PRINT過程代碼,打印數據集信息。

proc print data=saslib.inventory  noobs;
run;

上面代碼打印的數據集如圖2.4所示。

 

2.4 數據集數據值

該數據集包含4個觀測,每個觀測表示一種產品的各類信息。這里 有3個變量:Product_ID、Instock和Price,分別表示產品編號、庫存數和價格。其中P001R、12、125等均為數據值。

2.數據集命名

命名格式:

libref.SAS-data-set.membertype

3個組成部分,從左到右依次為邏輯庫引用名、數據集名稱和成員類型。在引用數據集時,通常會指定前兩個,SAS會根據上下文環境,例如該數據集出現的位置或數據集的自描述信息,來確定第三個。邏輯庫 引用名是與SAS數據集所在物理位置相關聯的SAS邏輯庫名。當創建新 數據集時,邏輯庫引用名表明要將該數據集保存在哪里(位置)。當引用SAS數據集時,邏輯庫引用名會告訴SAS在哪個邏輯庫中找到該數據 集。

數據集名稱遵守的SAS命名規則如下:

  1. ·最大長度為32字符。
  2. ·必須以字母(從A~Z,大小寫均可)或下划線(_)開始。
  3. ·可以是數字、字母和下划線(_)的任意組合。

成員類型由SAS指定,例如SAS數據文件的成員類型是DATA,SAS視圖的成員類型是VIEW。(一般情況下不需要去使用)

3.變量屬性

SAS數據集變量的屬性包括變量名、類型、長度、輸出格式(format)、輸入格式(informat)和標簽(label)輸出格式、輸入格式和標簽是變量的可選屬性

每個變量的變量名必須遵守的SAS命名規范如下:

  1. ·最大長度為32字節。
  2. ·必須以字母(從A~Z,大小寫均可)或下划線(_)開始。
  3. ·可以是數字、字母和下划線(_)的任意組合。 變量的類型是字符型或數字型。字符型變量可包含任何值,而數字型變量只能包含數字值(數字0~9、=、-、點(.)和科學計數法的 E)。變量類型確定了變量的缺失值如何顯示。字符型變量缺失值是空 格,而數字型的變量缺失值是點(.)。

SAS以數字值存儲日期和時間。默認情況下,SAS的日期值指從1960年1月1日開始的天數,SAS使用從凌晨開始的秒數存儲時間值, SAS的日期時間值(datetime)指從1960年1月1日開始的秒數。該開始日期也可以通過系統變量YEARCUTOFF指定為其他值。

下面提交如下代碼來生成數據集sales,並使用CONTETNS過程和PRINT過程分別打印該數據集的描述信息和數據值。

libname  saslib  'c:\sas\data';
data  saslib.sales;
infile  datalines  dsd missover;
input Emp_ID $ Dept $ Sales Date; format Sales COMMA10. Date yymmdd10.; informat Date date9.; label Emp_ID="員工ID"  Dept="部門"  Sales="銷售數據"; label Date="銷售時間";
datalines;
ET001,TSG,$10000,01JAN2012
ED002,,$12000,01FEB2012
ET004,TSG,$5000,02MAR2012
EC002,CSG,$23000,01APR2012
ED004,QSG,,01AUG2012
;
run;
proc  contents  data=saslib.sales;
run;
proc  print  data=saslib.sales  noobs label;
run;

如圖2.5所示為CONTENTS過程打印的部分結果,表示該數據集的變量屬性,其中,Date和Sales為數值型變量,Dept和Emp_ID為字符型 變量。如圖2.6所示為PRINT過程的打印結果,可以看出,Dept(部門) 的缺失值為空格,Sales(銷售數據)的缺失值為點(.)。

 

圖2.5 變量屬性

 

圖2.6 打印數據集 

格式(format)會影響數據值輸出的方式。SAS提供了各種字符、數字和日期時間格式。例如,為了將23000顯示為23000,必須使用 COMMAw.d形式的輸出格式。其中w表示最大寬度,d為小數位數。比 如,在圖2.5中,Date變量的輸出格式為“YYMMDD10.”,打印時該變量 的形式則為YYYY-MM-DD(例如2012-01-01)。Sales的輸出格式 為“COMMA10.”,對應的數據輸出形式則為10000。還可以創建並存儲自定義的格式,具體在后面介紹。

format var1 comma10;

 

輸入格式(informat)指定數據值以特定的格式讀入,從而成為標 准的SAS值。在讀取包含字母或其他特殊字符的數字值時必須使用輸入 格式。例如,需要把輸入值“$23000”讀取為數字型的變量,則必須使用 輸入格式DOLLARw.d才能正確讀入。自定義的格式也可以用作為輸入格式。SAS提供了豐富的輸入輸出格式用於從外部文件讀取各種日期格式 和顯示各種日期格式,以滿足對各種日期格式的需要。在上面的示例中使用輸入格式“DATE9.”讀入了“01JAN2012”形式的日期,輸出時使用的是輸出格式“YYMMDD10.”,從而將存儲的數字顯示為“2012-01-01”。

informat var1 comma10;

 

標簽通常是描述該變量的文本,最大 長度為256個字符。默認情況下,報表以變量名來標識變量,但是可以 將一個標簽分配給相應的變量來顯示該變量的描述信息。上例中 Emp_ID的標簽為“員工編號”,Dept的標簽為“部門”,Date的標簽為“銷 售時間”,Sales的標簽為“銷售數據”。在代碼中可以看到PRINT過程使 用了LABEL選項,這樣一來,打印的數據集表頭將會使用各變量的標 簽而不是變量名稱。

label var1=name1 var2=name2;

4.SAS數據文件

SAS數據文件是一種在其文件中包含數據的數據集。

有兩種類型的數據文件:原生SAS數據文件和接口SAS數據文件。

  1. 原生數據文件是SAS格式的文件,用來存儲SAS格式的數據值和描述信 息(邏輯庫是通過Base引擎定義的)。
  2. 接口數據文件是指數據以其他格式存在,並且SAS可以通過 SAS/ACCESS接口引擎訪問的數據文件,例如存在於Oracle、DB2、Sybase、ERP系統中的數據文件。SAS通過SAS/ACCESS接口引擎來訪問這些文件中的數據,並將這些文件當作SAS數據集處理(通過SAS/ACCESS 接口邏輯庫定義的)。

使用DATA步創建SAS數據文件的語法如下:

DATA  數據集名稱;
…   SAS語句…;
RUN;

其中,SAS語句用於指定數據源。不同的數據源,SAS語句也不盡相同,常用的3中如下。

  1. DATELINES語句表示從程序語句中讀取數據
  2. SET語句讀 取指定的輸入數據集
  3. INFILE語句讀取指定的外部數據文件

5.SAS視圖

SAS視圖本身並不存儲數據值,它僅包含描述信息和從其他SAS數據集或從存儲為其他軟件廠商文件格式的文件中獲取數據所需要的信息。SAS視圖的成員類型是VIEW。

可使用SQL過程、ACCESS過程或者DATA語句的VIEW選項來創建SAS視圖。根據創建的方式,視圖又分為SQL視圖、接口SAS視圖和DATA步視圖。其中SQL視圖和DATA步視圖都稱為原生視圖, SAS/ACCESS視圖稱為接口視圖。

創建DATA步視圖的語法如下:

DATA  數據集名稱/view=數據集名稱;
…   SAS語句…;
RUN;

與使用DATA步創建SAS數據文件一樣,SAS語句根據數據來源的 不同會有所不同。在DATA步視圖中可用的數據源可以是原始數據文 件、SAS數據文件、PROC SQL視圖、SAS/ACCESS視圖或其他數據庫 管理系統中的數據文件。下面給出了一段創建DATA視圖的示例代碼, 數據源為SAS數據文件。

data  saslib.invt_vw  / view=saslib.invt_vw;
set  saslib.inventory;
run;

上面代碼創建了DATA步視圖saslib.invt_vw,其數據來自於邏輯庫saslib下的Inventory數據文件。

接口視圖通過SAS/ACCESS創建,可讀取第三方數據庫管理系統(DBMS)的數據,例如DB2或Oracle。其實,SAS/ACCESS為這些第三方產品提供了LIBNAME引擎接口,對這些產品,建議使用LIBNAME和SAS/ACESS對應的引擎來指定SAS邏輯庫到DBMS數據,這比使用ACCESS過程創建接口視圖更容易,也更有效。 使用SAS視圖有如下優點:

  1. ·可以節省磁盤空間,因為SAS視圖不存儲實際數據,僅僅存儲去哪兒找到數據及數據如何格式化的指令。
  2. ·因為數據總是在執行時才從SAS視圖中獲取,這樣能保證輸入的數據集總是當前的。
  3. ·SAS視圖可減少由於數據設計的改變對用戶造成的影響。例如,可以改變存儲在SAS視圖里的查詢信息而不必改變視圖結果的特征。
  4. ·使用SAS/CONNECT軟件,SAS視圖可連接不同主機計算機上的SAS數據集,然后展示公司分布式數據的集成視圖。

SAS視圖可用於以下操作:輸入其他DATA步或PROC步,將數據 遷移到SAS數據文件或SAS支持的數據庫管理系統中,使用PROC SQL 與其他數據組合。

在選擇使用SAS數據文件還是SAS視圖時需要考慮以下方面:

  1. ·數據文件會使用額外的磁盤空間,而SAS視圖會占用額外的處理時間。
  2. ·數據文件變量可在使用前排序和創建索引,而SAS視圖在執行過程 中只能以其存在的形式處理數據。

6.特殊的數據集

還有一種特殊的數據集:_NULL_。如果想執行一個DATA步又不 想創建SAS數據集,可以指定關鍵字_NULL_作為數據集名稱。代碼如 下:

data  _null_;

SAS會執行該DATA步里面的語句但不會創建新數據集,不會有觀 測或變量寫入任何數據集。如果一個DATA步的輸出不需要存儲為數據 集,比如繪制報表,這種處理可更有效地利用計算機資源。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM