
第二章 將你的數(shù)據(jù)放入SAS(2.1-2.11)
2.1 將你的數(shù)據(jù)放入SAS的方法
你可能有各種形式的數(shù)據(jù),包括手寫在紙上、存放在電腦上、或是在數(shù)據(jù)庫管理系統(tǒng)里,不論如何,總有一種方法可以讓SAS來讀取。
SAS讀取的數(shù)據(jù)的方法主要有以下幾種類型:
? 直接輸入;
? 從原始數(shù)據(jù)文件中創(chuàng)建一個SAS數(shù)據(jù)集(creating SAS data sets from raw data files);
? 將其他軟件中的數(shù)據(jù)文件轉(zhuǎn)換成SAS數(shù)據(jù)集;
? 直接讀取其他軟件的數(shù)據(jù)集;
直接輸入
? Viewtable窗口可以讓你以表格形式輸入數(shù)據(jù),可以定義變量、設(shè)置屬性,如name、length和 type(character or numeric).
? SAS 企業(yè)向?qū)K,a Windows only application,has a data entry window that is very similar to the Viewtable window.As with Viewtable,you can define variables and give them attributes.
? SAS/FSP 模塊,是Full Screen Product的簡稱,可以設(shè)計定制的數(shù)據(jù)輸入窗口,也有檢測數(shù)據(jù)輸入錯誤的功能(The SAS/FSP product is licensed separately from Base SAS software.)。
從原始數(shù)據(jù)文件中創(chuàng)建一個SAS數(shù)據(jù)集 你有兩種方法讀取原始數(shù)據(jù)文件:
? 數(shù)據(jù)步可以讀取任何形式的原始數(shù)據(jù)文件,這種方法還將在2.4中詳解。
? 導(dǎo)入向?qū)В↖mport Wizard)、導(dǎo)入過程(IMPORT procedure)適用于UNIX、OpenVMS和 Windows操作環(huán)境的簡單方法,可以讀取CSV(comma-separated values)和其他一些限定的文件類型。
將其他軟件中的數(shù)據(jù)文件轉(zhuǎn)換成SAS數(shù)據(jù)集 如果數(shù)據(jù)在一個軟件中以某種格式存放,但需要用另一種軟件分析時,就會很麻煩。有幾種方法可以將某種軟件中的數(shù)據(jù)轉(zhuǎn)換成SAS數(shù)據(jù)集:
? 如果安裝SAS/ACCESS模塊,可以用導(dǎo)入過程(import procedure)和導(dǎo)入向?qū)В↖mport Wizard)將Excel、Lotus、dBase和Access文件導(dǎo)入SAS數(shù)據(jù)集,見2.3和2.17(?)。
? 如果沒有安裝,可以用存放數(shù)據(jù)的軟件創(chuàng)建一個原始文件,并用數(shù)據(jù)步或?qū)脒^程(import procedure)讀取。很多軟件都可以創(chuàng)建CSV文件。
? Windows操作環(huán)境下也可以用動態(tài)數(shù)據(jù)交換技術(shù)(Dynamic Data Exchange,DDE),見2.18。前提是必須有一個其他的Windows程序與SAS同時運行,再使用DDE和數(shù)據(jù)步。
直接讀取其他軟件的數(shù)據(jù)集
? SAS/ACCESS產(chǎn)品可以不用轉(zhuǎn)換數(shù)據(jù)格式讀取數(shù)據(jù),并適用于大部分大部分數(shù)據(jù)庫管理系統(tǒng),包括ORACLE,DB2,INGRES和 SYBASE(但使用方法本書沒有介紹)。
? 使用Excel engine和Access engine來讀取這兩種類型的數(shù)據(jù)。(SAS幫助文檔)
? 還有其他的一些數(shù)據(jù)引擎(data engines)來讀取數(shù)據(jù),如SPSS engine(附錄D),查找?guī)椭臋n找到適合你操作環(huán)境的所有有效engine。
2.2 用Viewtable窗口輸入數(shù)據(jù)
調(diào)用Viewtable窗口,在工具欄的下拉菜單中選擇表編輯器(Table Editor)

列屬性窗口 每一列頂部的字母是默認的變量名,右擊變量名,即可打開列屬性(column attributes)窗口,設(shè)置屬性之后,點擊應(yīng)用(apply),設(shè)置完后關(guān)閉即可。

輸入數(shù)據(jù)

保存表 選擇文件(file)——另存為(save as),選擇一個邏輯庫保存,如果想保存在新的邏輯庫,點擊創(chuàng)建新邏輯庫圖表(New Library),輸入邏輯庫的名字和保存路徑。
打開一個已有的表 首先打開表編輯器,選擇文件(file)——打開(open)。打開之后,SAS默認的是瀏覽模式,如果要對數(shù)據(jù)進行編輯,則要在編輯(edit)菜單中選擇編輯模式。也可以在資源管理器窗口中雙擊打開一個已有的表。
其他功能 其他一些功能包括排序、打?。╬rinting)、增加和刪除行、一次瀏覽一行(窗體視圖Form View)、一次瀏覽多行(表視圖 Table View)。圖標和菜單都可以選擇這些功能。
在SAS程序中使用表 如下程序語句可以將表內(nèi)容輸出打印:
PROC PRINT DATA=Sasuser.coffee;
RUN;
2.3 用導(dǎo)入向?qū)В↖mport Wizard)讀取文件
導(dǎo)入向?qū)g覽你的文件以決定變量的類型,并默認數(shù)據(jù)表的第一行存放變量名。
第一步,從文件(file)下拉菜單中選擇導(dǎo)入數(shù)據(jù)(import data)導(dǎo)入向?qū)В↖mport Wizard)

第二步,從standard data sources中選擇要導(dǎo)入的數(shù)據(jù)類型。以comma separated values(*.csv)為例。點擊下一步
第三步,指定要導(dǎo)入的文件位置,SAS默認第一行存放變量名,從第二行開始存放數(shù)據(jù)。Options可以改變這種默認選擇。

第四步,選擇數(shù)據(jù)集要存放的邏輯庫,并為數(shù)據(jù)集取一個名字(member)。

最后,導(dǎo)入向?qū)?chuàng)造一個proc import語句,可以是SAS再次導(dǎo)入這個數(shù)據(jù)。

另外,對于一些類型的數(shù)據(jù)文件還有額外的步驟,比如Microsoft Access文件,你需要輸入數(shù)據(jù)庫名和藥導(dǎo)入的表名,有時甚至還要輸入user的ID號和密碼。
在SAS程序中使用導(dǎo)入數(shù)據(jù) 比如你將數(shù)據(jù)存放在work邏輯庫,并署名為flowers,那么你可以這樣來輸入它:
PROC PRINT DATA=WORK.flowers;
RUN;
由于work是默認的邏輯庫,所以也可以直接這樣:
PROC PRINT DATA=flowers;
RUN;
2.4 告訴SAS你的原始數(shù)據(jù)在哪
如果數(shù)據(jù)是原始數(shù)據(jù)(比如text,ASCII,sequential,flat files),那么用數(shù)據(jù)步來讀取能帶給你最大的靈活性。但首先你要告訴SAS你的原始數(shù)據(jù)在哪。
原始數(shù)據(jù)可以通過文本編輯器(text editors)或系統(tǒng)命令。對PC使用者來說,原始數(shù)據(jù)沒有相關(guān)聯(lián)的應(yīng)用程序(就像doc文件與word相關(guān)聯(lián),雙擊doc程序就默認調(diào)用word程序以打開),有時他們會與像Microsoft Notepad這樣的簡單編輯器相關(guān)聯(lián)。
內(nèi)部原始數(shù)據(jù) 如果直接將數(shù)據(jù)輸入SAS程序中,那么數(shù)據(jù)就是SAS內(nèi)部數(shù)據(jù)。DATALINES是一個指示,告訴SAS下面跟著是數(shù)據(jù)行,直到分號結(jié)尾,這個分號可以另起一行,也可以接在數(shù)據(jù)的后面。也可以用card代替DATALINES。下面是一個程序,這個程序創(chuàng)建了一個USPRESIDENTS數(shù)據(jù)集。(Input語句還將在2.5和2.15中討論)

外部原始數(shù)據(jù) 數(shù)據(jù)外SAS程序外部時,使用INFILE語句告訴SAS外部數(shù)據(jù)的文件名和存放路徑,它在data語句之后,在INPUT語句之前。INFILE后面的文件名和路徑要用引號,各種系統(tǒng)的引用方式各不同:

假設(shè)有一個President.dat數(shù)據(jù)在你的C盤的MyRawData目錄中,

那么可以用如下方式引用這個外部數(shù)據(jù):

SAS日志 讀取外部數(shù)據(jù)時,SAS日志會給一些很有用的信息,檢查這些信息可以解決一些問題,比如對比INFILE語句讀取的記錄數(shù)和數(shù)據(jù)集中實際觀測值,可以確定SAS是否正確的讀取了數(shù)據(jù)。上面程序的日志如下圖所示,

過長記錄 在一些操作環(huán)境中,SAS假定外部數(shù)據(jù)文件的記錄長度為256或更少(記錄長度是指某行中的字符數(shù),包括空格),如果長度過長,SAS不能讀取全部,此時需要在INFILE語句中使用LRECL=來指定長度,這個長度必須是數(shù)據(jù)中最長行的長度,如:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? INFILE’c:\MyRawData\President.dat’LRECL=2000;
可以通過SAS日志來查看最大記錄長度。