2.3 邏輯庫與數據集
SAS從導入數據到完成統計分析報告,這中間涉及很多重要的基本概念,如數據集、DATA步,PROC步等。接下來,我們就順著這個流程,把最基本、最重要的概念捋一遍,那就從邏輯庫和數據集開始吧。
→2.3.1 邏輯庫
從上一小節SAS數據分析流程里我們知道,要進行數據分析,需要我們先把外部的Windows數據文件,比如CSV文件轉成SAS可以直接識別和處理的SAS數據集,而SAS數據集則必須置于SAS邏輯庫(SAS Library)中。數據存儲在數據集里,數據集存放在邏輯庫中,數據、數據集和邏輯庫的關系就如同數據頁、文件夾和抽屜的關系(見圖2-3)。

圖2-3 數據、數據集以及邏輯庫的關系
在Windows環境下,SAS邏輯庫其實是映射到一個(當然,也可以是多個)文件夾的名字。SAS會按照某些約定的格式去讀寫SAS邏輯庫中的SAS數據集,這些約定的格式,被稱為引擎(Engine),如SAS 9.4默認的引擎就是V9,SAS 9.4會用V9這種格式去生成SAS數據集、讀取數據集。此外,SAS還可以用其他引擎讀取外部數據,如可以用XLSX引擎讀取Excel文件,SPSS引擎讀取SPSS數據等(見圖2-4)。

圖2-4 SAS永久庫的建立以及引擎
大多數情況下,我們都希望處理好的SAS數據集能夠保存在某個文件夾下,以備后用,而對于一些中間數據或者臨時數據,我們則希望關掉SAS后它們就被自動刪除。因此,SAS給我們分別提供了永久邏輯庫和臨時邏輯庫(見圖2-5)。永久庫除了有SAS自帶的Maps、Mapsgfk、Mapssas、Sashelp以及Sasuser外,我們也可以自建存放自己數據集的永久庫,而臨時庫在SAS里就一個,名為Work庫。我們在Work庫里倒騰數據時很可能產生了一大堆中間數據集,最后把倒騰好的最終數據集存入永久庫即可,關掉SAS軟件后,那些留在Work庫里的中間數據集不用我們去操心,會被自動刪除。

圖2-5 永久邏輯庫與臨時邏輯庫
例如,我們想在D:\03 Writting\01 SAS編程演義\02 Data\Clean的位置建立一個永久邏輯庫,取名為“Demo”。一種方法是采用工具按鈕如圖2-4所示方法生成;另一種方法則是通過LIBNAME語句生成?;靖袷骄褪牵篖IBANME數據庫名稱 “數據庫物理地址”,具體可見程序2-1利用LIBNAME語句自建永久邏輯庫。
程序2-1 利用LIBNAME語句自建永久邏輯庫
*===帶*號的行是注釋行===; *===自建永久庫===; *===取名Demo,地址:D:\03 Writting\01 SAS編程演義\02 Data\Clean; libname demo "D:\03 Writting\01 SAS編程演義\02 Data\Clean";
需要留意的是,通過工具按鈕建立永久庫時,可以在建立時勾上“Enable at startup”,下次啟動時SAS就會自動加載這個永久庫,而通過LIBANME語句自建的永久庫在SAS重新啟動時,需要重新運行LIBNAME語句才可以重新把永久庫的名字和物理地址關聯上,然后才能在SAS Libraries里看到。如果想要讓SAS語句建立的永久庫在啟動后就能看到,可以把包含LIBNAME語句的程序命名為autoexec.sas,并放入和sas.exe同級的目錄中,此后每次SAS啟動時會自動運行autoexec.sas程序,建立永久邏輯庫。
→2.3.2 數據集
SAS數據集有兩種:一種是SAS數據文件(SAS Data File);另一種是SAS視圖(SAS View)。數據文件和視圖用SAS打開后都類似于一張表格,不同的是數據文件是真實存在的數據,而視圖是運行查詢語句后動態生成的數據,兩者的圖標在DMS中也不一樣,如圖2-6所示。不過兩者在實際內容效果方面卻是一樣的,如圖2-7所示。由此而帶來的疑惑是:既然兩者的實際內容效果一樣,有了數據文件為何還需要視圖?謹記:視圖是依據查詢語句動態生成,因此視圖本身幾乎是不占存儲空間的,利用視圖可以節約硬盤空間。

圖2-6 SAS數據文件與視圖圖標

圖2-7 SAS數據文件與視圖內容
SAS數據集的組成成分,在邏輯上可能僅有描述信息(數據視圖時的情況),也可能是包含描述信息、數據值(數據文件時的情況)以及可能的索引和其他擴展屬性四部分,具體見表2-1。單就數據集的描述信息來說,包括兩部分:一部分是數據集概要信息,如數據集類型、創建引擎、創建時間等;另一部分是變量信息,如變量名稱、類型、長度以及格式等。至于數據值,也即如圖2-7所示的內容,是由行、列組成的表。行和列在SAS數據集里分別稱為觀測(observation)和變量(variable),這部分內容是數據文件獨有的,SAS視圖只有打開運行時才生成。
表2-1 數據集邏輯構成示意

如果希望查看數據集的描述信息,特別是如圖2-8所示的第三部分內容:變量列表及其屬性,則可以通過PROC CONTENTS實現,并且可以進一步加工整理成數據庫的變量字典,極大地方便后續的工作。當然,也可以通過右擊數據集,通過「查看列」來查看變量信息(見圖2-9)。

圖2-8 SAS數據文件描述信息

圖2-9 右擊數據集查看變量信息
欲查看數據值,可以通過PROC PRINT實現,當然,雙擊數據集也可以。不過在實際操作中,我們不會總是這樣查看所有數據值,而是希望通過統計過程查看一些統計信息,如均數、分位數、分布圖等。
由于數據集都在邏輯庫下,因此在程序中指定數據集時,需要按照「邏輯庫.數據集」的二級命名格式來明確告知是哪個邏輯庫下的哪個數據集,中間用英文的句號隔開,當邏輯庫為臨時庫WORK時,可以省略掉一級命名結構和句號「邏輯庫.」。
程序2-2 查看數據集描述信息與數據值
*====查看邏輯庫Demo里的數據集描述信息; *===查看數據文件的描述信息; proc contentsdata=demo.class_datafile; run; *===查看數據文件的數據值; proc printdata=demo.class_datafile; run; *===查看視圖的描述信息; proc contentsdata=demo.class_view; run; *===查看視圖的數據值; proc printdata=demo.class_view; run;
查看數據集的信息是學會了,但是如何創建數據文件呢?回顧圖2-2,我們知道有兩種方式:導入外部數據或者讀取既有的SAS數據集。導入外部數據,我們既可以用DATA步,也可以用PROC步,具體情況將在第3章做詳細介紹。讀取既有數據集,我們可以用DATA步的SET語句,這里我們簡單舉例,把SAShelp庫的Class數據集讀取到我們自建的永久庫Demo里和臨時庫WORK里,并都命名為class_datafile。
程序2-3 SET語句建立數據文件
*===自建永久庫; libname demo "D:\03 Writting\01 SAS編程演義\02 Data\Clean"; *===建永久數據集,demo.不可省略; datademo.class_datafile; set sashelp.class; run; *===建臨時數據集,work.被省略; data class_datafile; set sashelp.class; run;
建立數據文件學會了,如何建立視圖呢?有兩種方法:DATA步的VIEW選項和PROC SQL的Create view語句。
程序2-4 創建SAS視圖
*===建視圖; *===from data step; datademo.class_view/view=demo.class_view; set sashelp.class; run; *===from Proc sql; proc sql; create view demo.class_view as select * from sashelp.class; quit;
→2.3.3 變量
數據集中最為重要的一個概念莫過于變量(variable)。在SAS里,我們可以將變量簡單理解為存儲數字或者字符的容器,一個變量就是一列。變量有其屬性,包括名稱、類型、長度、輸入格式、輸出格式、標簽、觀測中的位置以及索引類型等。圖2-9展示了變量的屬性信息。
變量名有其命名規則,后面會詳細介紹。同其他編程語言或者統計軟件不同的是,SAS的變量類型非常簡約,只有兩種:數字和字符。數字型變量存儲浮點數,包括日期和時間(在SAS里,日期實際存儲的是距離1960年1月1日的天數,而時間實際存儲的是距離凌晨的秒數,具體可見程序2-5);字符型變量存儲的是拉丁字母、0~9阿拉伯數字以及其他特殊字符,默認長度是8個字節。輸入/輸出格式是SAS讀取或者顯示變量的規則,數字型變量默認輸入格式是「w.d」,輸出格式是「BEST12.」;字符型默認輸入、輸出格式均為「$w.」。關于格式,我們將在第7章做詳細介紹。
程序2-5 SAS日期、時間以及日期時間的本質
datatmp; date="01Jan1960"d; time="00:00:00"t; datetime="01Jan1960 00:00:00"dt; run;
- jQuery Mobile Web Development Essentials(Third Edition)
- Getting started with Google Guava
- Java EE 6 企業級應用開發教程
- WebAssembly實戰
- Java高并發核心編程(卷2):多線程、鎖、JMM、JUC、高并發設計模式
- 劍指JVM:虛擬機實踐與性能調優
- Python從入門到精通(精粹版)
- Linux網絡程序設計:基于龍芯平臺
- SQL基礎教程(第2版)
- 運用后端技術處理業務邏輯(藍橋杯軟件大賽培訓教材-Java方向)
- Windows Embedded CE 6.0程序設計實戰
- Illustrator CC平面設計實戰從入門到精通(視頻自學全彩版)
- 微課學人工智能Python編程
- 金融商業數據分析:基于Python和SAS
- JavaWeb入門經典