


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、SAS導(dǎo)入外部文件方法匯總與程序剖析蒲星月(天津商業(yè)大學(xué) ,天津 300134)摘 要 數(shù)據(jù)讀入是利用 SAS 軟件進(jìn)行數(shù)據(jù)分析等操作的最關(guān)鍵的一步 ,本文從 SAS 數(shù)據(jù)讀入三大方法(列輸入、列 表輸入和格式輸入法)出發(fā) ,以 SAS9.3 軟件版本為操作平臺 ,全面介紹了各種類型的文本文件數(shù)據(jù)導(dǎo)入 SAS 的程序。 面向初學(xué)者的角度 ,每種方法下均給出范例 ,并詳細(xì)解釋了所使用的語句和語法的含義。關(guān)鍵詞 SAS 導(dǎo)入 ;外部文件 ;方法匯總 ;程序剖析中圖分類號 :TP3文獻(xiàn)標(biāo)識碼 :A文章編號 :1671-7597(2014)18-0119-031 引入數(shù)據(jù)的導(dǎo)入對使用 SAS 軟件來進(jìn)
2、行數(shù)據(jù)分析等是最開始 的一步 ,也是至關(guān)重要的一步。SAS 可以讀入包括文本文件、 Excel 表格文件、Access、DB2、Oracle 數(shù)據(jù)庫在內(nèi)的多種數(shù)據(jù) 文件。 其中 ,Excel 表格文件、Access、DB2、Oracle 數(shù)據(jù)庫 文件可以簡單地由 SAS 文件菜單導(dǎo)入數(shù)據(jù)選項的向?qū)瓿?; 而由于文本文件格式復(fù)雜 ,往往需要編程完成。根據(jù)數(shù)據(jù)類型 的不同 ,SAS 導(dǎo)入方法主要分為三大類 :列表輸入、列輸入和 格式輸入法 ;當(dāng)然還有許多分散的語句、語法用于導(dǎo)入數(shù)據(jù)。 本文主要從這三大方法著重介紹文本文件數(shù)據(jù)的 SAS 導(dǎo)入程序。 其中 ,infile 語句是貫穿全文的最重要的語
3、句 ,infile 語句 的功能十分強(qiáng)大 ,本文只介紹最常用的一些。2 列表輸入(List Input)列表輸入用于讀已經(jīng)用分隔符分隔好的數(shù)據(jù)的方法 :SAS 讀入一個變量下的數(shù)據(jù)直到遇到分隔符停止 ,然后移動到找到 下一個數(shù)字開始。缺省分隔符為空格 ,分隔符的不同 ,列表輸 入的程序會有很大不同。列表輸入只適用于數(shù)據(jù)長度為 8 字節(jié) 以下的數(shù)值型數(shù)據(jù)以及字符型數(shù)據(jù) 1,列表輸入不能讀日期型 數(shù)據(jù)。且不能有選擇的只讀取其中某些數(shù)據(jù)。2.1 空格作為分隔符空格作為分隔符的數(shù)據(jù)的讀入是最簡單的 ,因為 SAS 中 , 默認(rèn)空格為缺省分隔符。這里的空格可以是一個或者多個。File 1: D:newe
4、mployee.txt假設(shè)有數(shù)據(jù) File1: “D:newemployee.txt”,其中每一列 分別代表某公司錄取的新職員的年齡 ,性別 ,身高(cm)和體 重(kg)。數(shù)據(jù)用一個空格隔開。SAS 程序為 :data newemployee;infile D:newemployee.txt;input Age GenderHeight Weight; run;這個程序中 ,data 語句后面是這個數(shù)據(jù)存在 SAS 邏輯庫中的名字 ,這里 newemployee 數(shù)據(jù)存在 SAS 臨時數(shù)據(jù)庫 work 中。程序中的 infile 語句是用來告訴 SAS 源數(shù)據(jù)文件的地址 ; input 語句
5、告訴 SAS 源數(shù)據(jù)有多少個變量、變量的類型和名稱 , 默認(rèn)的變量類型是數(shù)值型 ,因此數(shù)值型數(shù)據(jù)不用特別指明 ,直 接寫出變量名稱即可 ;其他類型的變量需要在變量名后面指出 其類型 ,字符型變量加“”。這個例子中 ,因為 Gender 性別 是字符型 ,所以在 Gender 后面加“”。由于分隔符是空格 ,所以需要注意每一個變量對應(yīng)的每一個數(shù)據(jù)中不能出現(xiàn)空格(比如外國人的名字 Lee Cooper)。另外, 若存在缺失值 ,且缺失值未做任何處理 ,只是用空格代替 ,是 行不通的 ;列表輸入下 ,必須在原數(shù)據(jù)上就處理好缺失值 ,比 如用“.”表示。2.2 逗號作為分隔符用逗號作為分隔符的文件在
6、叫“CSV” 文 件 ,是 comma- separated values 的縮寫 ,若用文本文件格式打開 ,會自動生 成作為分隔符的逗號。若 file1 中的分隔符全部由空格換成了 逗號 ,只需在 infile 語句后面加上“dsd”。dsd 是 delimiter-sensitive data 的縮寫 ,有如下三個作 用 :第一 ,把缺省分隔符由空格改為逗號 ;第二 ,如果連續(xù)出 現(xiàn)兩個逗號 ,默認(rèn)之間有一個缺失值 ;第三 ,如果原數(shù)據(jù)中字 符型數(shù)據(jù)被引號引起來(無論是單引號還是雙引號),SAS 會把 引號去掉。程序如下 :data newemployee;infile D:newempl
7、oyee.txt dsd; input Age Gender Height Weight;run;在設(shè)置了 dsd 的情況下 ,即使在逗號中又混合使用了空格 也不影響。因為列表輸入工作原理是一樣的 ,這里只是把缺省 分隔符換成了逗號 ,即默認(rèn)從某個數(shù)字開始讀 ,讀到逗號為止 , 然后移動到找到下一個數(shù)字開始讀下一個數(shù)據(jù)。另外 ,若該數(shù)據(jù)文件的格式為 csv,那么除路徑結(jié)尾為 “.csv”外 ,仍可使用該程序。2.3 Tab 作為分隔符Tab 是制表跳格符 ,相當(dāng)于 8 個空格 ,其應(yīng)用相當(dāng)廣泛 , 比如許多股票軟件(如“同花順”)導(dǎo)出的數(shù)據(jù)都是用 Tab 作為 分隔符的。若 file1 中的分
8、隔符全部由空格換成了 Tab,其導(dǎo)入 程序為 :data newemployee;infile D:newemployee.txt' dlm=09x; input Age GenderHeight Weight;T技術(shù)應(yīng)用ECHNOLOGY APPLICATION run;這里在 infile 語句后添加的 dlm 是 delimiter 的縮寫 ,在 此處添加“dlm=”表示指定一種分隔符 ,等號后面即為制定的 分隔符。因為 Tab 的表現(xiàn)形式是 8 個空格 ,不可能在“dlm=” 后面輸入空格。所以 ,此處用“09x”表示 Tab 形式。需注 意的是 ,“09x” 是在 ASCII
9、 下的表現(xiàn)方式 ,運用于所有的 windows 平臺和 UNIX 操作系統(tǒng)。如果是在 EBCDIC 下的 Tab,則 用“05x”表示 ,即“dlm=05x”。2.4 其他分隔符除了 Tab 這種不可視的特殊分隔符以外的其他分隔符的列 表輸入法 ,都可以用前文提到的 dlm。比如 ,如果分隔符是“:”, 那么程序如下 :data newemployee;infile D:newemployee.txt dlm=:; input Age Gender Height Weight;run;并且 ,dlm 還可以 dsd 同時使用 ,不分先后順序。這時 , dsd 還是會有前文提到的三個作用 ,只是
10、其中的逗號會變成 dlm 后指定的分隔符號。3 列輸入(Column Input)不同于已經(jīng)使用分隔符分隔好的數(shù)據(jù) ,有很多數(shù)據(jù)集是沒 有用分隔符隔開的 ,這些數(shù)據(jù)的導(dǎo)入就不能使用列表輸入法。 這些數(shù)據(jù)往往將特定的信息存于固定的列中 ,這樣做的好處在 于 ,不必?fù)?dān)心缺失值的處理 ,并且當(dāng)你讀入 SAS 的時候可以有 選擇的讀入你需要的某些數(shù)據(jù)。讀這類數(shù)據(jù)可以采用列輸入或 者格式輸入法 ,這里先介紹列輸入法。列輸入是最簡單的用于導(dǎo)入不同變量有固定的某列或某幾 列的類型的數(shù)據(jù)。但只能讀字符型和標(biāo)準(zhǔn)數(shù)值型數(shù)據(jù)值 ,標(biāo)準(zhǔn) 數(shù)值型是指指包括數(shù)字、小數(shù)點、正負(fù)號或者 E 表達(dá)的數(shù)值 , 比如 3.4E3,
11、而例如像表示金額的數(shù)值因為含有逗號或者貨幣符 號不是標(biāo)準(zhǔn)數(shù)值型數(shù)據(jù) ,因此不能使用列輸入法。File 3 D:salary.txt假設(shè)有數(shù)據(jù) File3:”D:salary.txt”。數(shù)據(jù)中的第一排是 人為添加上去 ,幫助數(shù)列數(shù)的 ,實際數(shù)據(jù)中并沒有該行。可以 數(shù)出 ,第 1-2 列是職工編號 ,第 3 列是性別 ,第 4-14 列是出生年月 ,第 15-22 列是職工基本工資 ,第 23-30 列是職工補(bǔ)貼 , 這就是一個固定列數(shù)的數(shù)據(jù)。將這個數(shù)據(jù)集導(dǎo)入 SAS 的程序 如下 :data salary;infile d:salary.txt;input No 1-2 Gender 3 DOB
12、 4-14 Salary 15-23 Welfare 26-32 Name 39-45; run;這里 ,infile 語句后面仍然緊跟源數(shù)據(jù)路徑 ,而 input 后 不再單純只跟變量名和類型了 ,還要再在變量名和類型后面加 上該變量指定的列數(shù)。需要注意的 ,源數(shù)據(jù)每一個觀測值(即 每一行)結(jié)尾的地方 ,也就是最后一個變量值一定要填滿規(guī)定 的列數(shù)。比如 salary 的例子中 ,最末列是變量 Name,在固定的 39-45 列 ;但 Sky 這個觀測值 ,只有三個字符 ,占第 40-43 列 ,那么還需要在其后加上兩個空格填滿第 44-45 列。如果不這樣 做 ,SAS 默認(rèn)讀完 Sky 三
13、個字符后 ,會以為這個觀測值還沒有 完 ,從而從第二行開始尋找 ,找到第二行的 12 來填滿所需求的 39-45 列 10 列的固定列 ,這是整個數(shù)據(jù)就產(chǎn)生了讀入混亂。解 決這個問題還可以把最末的數(shù)據(jù)右對齊 ,還可以調(diào)用 pad 語法。 若讀取列中只有空格或者“.”,那么 SAS 作缺失值處理。另外一點需要注意的是 ,因為列輸入只能讀字符型和標(biāo)準(zhǔn)數(shù)值 型 ,所以這里把出生日期處理為字符型數(shù)據(jù)。4 格式輸入(Formatted Input)格式輸入是最常用 ,也是最萬能的一種讀入數(shù)據(jù)的方法 , 與列輸入一樣的是 ,它也是用于定義好固定列的數(shù)據(jù)。跟列輸 入和列表輸入對源數(shù)據(jù)有嚴(yán)格限制不同 ,用格式
14、輸入法輸入的 數(shù)據(jù)既可以是字符型或者標(biāo)準(zhǔn)數(shù)值型 ,也可以是非標(biāo)準(zhǔn)數(shù)值型(含逗號或貨幣符號)和各種格式的日期型數(shù)據(jù)。也就是說 ,只 要數(shù)據(jù)是不標(biāo)準(zhǔn)的數(shù)據(jù)但仍然有固定的列 ,就用格式輸入。假設(shè)還是輸入上面的數(shù)據(jù) ,這里為了更加詳細(xì)地了解貨幣 的輸入,在職工工資前面加上美元符號。這里需要注意一個問題, SAS 中只能顯示美元符號。若是文本文件輸入 ,帶其他貨幣符 號的數(shù)值會無法讀入 ;若是其他數(shù)據(jù)庫或者 excel 表格文件導(dǎo) 入 ,SAS 會自動轉(zhuǎn)換為美元符號。程序如下 :data salary;infile D:salary.txt;input 1 No 2. 3 Gender 1. 5 DOB
15、 mmddyy10.16 salary dollar10.227 welfare 7.2 35 name 6.;run;程序中的 是格式輸入的標(biāo)志 , 就像一個指針指向某一列, 比如 3 就是告訴 SAS 指向第 3 列的。指明列數(shù)以后 ,寫變量名 , 變量名后面是該變量的格式 ,包括數(shù)據(jù)類型、位數(shù)。位數(shù)輸入 的標(biāo)準(zhǔn)格式應(yīng)該是“w.d”,“w”是該數(shù)據(jù)的總位數(shù)(包括符號 和小數(shù)),“d”是該數(shù)據(jù)的小數(shù)位數(shù) ;如果是整數(shù) ,那么 d 可以 輸為 0 或者不輸。比如 ,這個數(shù)據(jù)里的職工補(bǔ)貼 welfare 是一 個最長占 7 位(包括小數(shù)和點),其小數(shù)部分有兩位 ,則位數(shù)輸 入應(yīng)該是“7.2”。如
16、果是字符型數(shù)據(jù) ,除了指明位數(shù) ,還需要 在位數(shù)之前首先指明該數(shù)據(jù)類型 ,其格式應(yīng)該是“w.”這里 肯定沒有小數(shù)位數(shù) ,所以沒有 d。如果是日期型數(shù)據(jù) ,其格式有 多種 ,本文總結(jié)了所有類型的數(shù)據(jù)(見圖表 3)2。在 salary 這個數(shù)據(jù)中的出生日期是按照“mm/dd/yyyy(日 / 月 / 年)”組 織的 ,需要把這個格式告訴 SAS,所以程序中的“mmddyy10.” 就是這個作用 ,“10.”同樣指的是包括“/”一共占有 10 個字 符位。需要注意的是 ,日期型數(shù)據(jù)在 SAS 中的儲存是按照距離 1960年1月1 日有多少天來的 ,所以 salary2 這個數(shù)據(jù)在 SAS 中 ,如果
17、不做任何處理 ,顯示如圖表 1。其中 ,出生日期(DOB) 是按照計算到 1960年1月1 日的天數(shù)顯示的。比如 ,1960 年1 月 1 日就是 0。表1 表2 120 硅谷SAS格式源數(shù)據(jù)形式日 期 型datew.ddmmmyy/ddmmmyyyy(mmm為月份英文縮寫)datetimew.ddmmmyy hh:mm:ss.ssddmmyyw.ddmmyy/ddmmyyyyjulianw.yyddd/yyyyddd(Julian儒略日日期)mmddyymmddyy/mmddyyyytimew.hh:mm:ss.ss數(shù) 值 型w.d標(biāo)準(zhǔn)數(shù)值型hexw.16進(jìn)制數(shù)據(jù)讀入為浮點型數(shù)據(jù)ibw.d二
18、進(jìn)制數(shù)據(jù)percentw.百分?jǐn)?shù)commaw.d含逗號、貨幣符號的數(shù)據(jù),負(fù)數(shù)表示為括號 的數(shù)據(jù)字 符 型charw.字符數(shù)據(jù)讀入不刪除前后空格hex16進(jìn)制數(shù)據(jù)轉(zhuǎn)化成字符型w.標(biāo)準(zhǔn)字符,刪除前空格5 列輸入法和格式法混合使用在前文中 ,格式化輸入中的格式定義可以運用到列輸入中。 這個方法針對那些有分隔符但是其中包含字符超過 8bytes 數(shù)值 型數(shù)據(jù)或者其中有日期型數(shù)據(jù)的文本文件或者 CSV 文件。File 5 D:salary2.txt假設(shè)有數(shù)據(jù)“D:salary2.txt” ,其中第一列是編號(首 位有 0,只能處理成字符型),第二列是姓名 ,第三列是出生日 期(日期型),第四列是工資。程
19、序如下 :data salary2;infile D:salary2.txt dsd;input No :2. Name : 18. DOB : ddmmyy10. salary : dollar10.2;run;程序中“ :”是該方法的標(biāo)志 ,告訴 SAS 讀入數(shù)據(jù)時候按 照“:”后面的格式讀入 ,但是遇到分隔符就停下。如果沒有“:”, SAS 會一直讀數(shù)據(jù) ,直到滿足后面的格式位置。這里還有一個問題 ,如果姓名里有空格隔開 ,而剛好分隔 符也為空格 ,那么還需要做如下處理 :第一 ,源數(shù)據(jù)中的姓名 變量與后一項變量出生日期之間需要兩個或以上的空格 ;第二 , 程序中 ,姓名后面的“ :”改
20、為“&”。程序如下 :data salary3;infile D:salary3.txt;input No :2.Name & 18. DOB : ddmmyy10.3 結(jié)論計算機(jī)網(wǎng)絡(luò)技術(shù)是人類社會發(fā)展的一個重要的文明成果 , 它已經(jīng)滲透到社會的各個領(lǐng)域當(dāng)中 ,并且在其中發(fā)揮著十分重 要的作用。計算機(jī)網(wǎng)絡(luò)技術(shù)對社會的發(fā)展具有促進(jìn)的作用 ,已 逐漸成為推動社會發(fā)展的重要力量。各界都應(yīng)該掌握計算機(jī)網(wǎng) 絡(luò)技術(shù)的相關(guān)知識 ,并且需要科學(xué)合理地使用該先進(jìn)的計算機(jī) 網(wǎng)絡(luò)技術(shù) ,以促進(jìn)本行業(yè)能夠快速的發(fā)展和不斷進(jìn)步。參考文獻(xiàn)1譚同燦.計算機(jī)網(wǎng)絡(luò)技術(shù)的應(yīng)用及其發(fā)展J.計算機(jī)光盤軟salary
21、: dollar10.2; run;6 infile 語句補(bǔ)充語法有一些詞可以加在 infile 語句末 ,就像前文提到的 dsd 和 dlm 一樣。這些詞往往有特定的功能用來處理一些特殊的數(shù)據(jù) 輸入。并且這些詞都可以疊加使用。使用哪幾個就在 infile 語 句后面加上某幾個(順序不限)。1)firstobs。firstobs 用來指定從源數(shù)據(jù)文件的哪一行 開始導(dǎo)入。這個特別廣泛地用在源數(shù)據(jù)的第一行是變量名稱的 時候 ,或者正如前文在第一行加入了方便定列數(shù)的編碼的情況 下 ,這種情況下的程序 :input源文件地址firstobs=2;2)obs。obs 用來指定導(dǎo)入的數(shù)據(jù)到源數(shù)據(jù)文件的哪一行 終止。這個廣泛應(yīng)用在某些程序測試或者誤差分析等情況下 , 與 firstobs 功能對應(yīng)。假設(shè)這里只讀入 100 行以前的數(shù)據(jù) ,程 序為 :input源文件地址obs=100;3)missover。missover 用在當(dāng)某一行的某些數(shù)據(jù)有缺失 , 防止 sas 從第二行尋找來補(bǔ)足缺失的情況。具體來說 ,如果定 義的變量有十個 ,但某行只有 9 個 ,如果不用 missover,那么 SAS 會到下一行搜索第一個數(shù)據(jù)來補(bǔ)足十個 ,會導(dǎo)致后面的數(shù) 據(jù)都出錯 ,而 missover 就是阻止這種情況的。程序為 :input源文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市場調(diào)查合同范本
- 農(nóng)業(yè)用地開挖合同范本
- 南京教育培訓(xùn)合同范本
- 衛(wèi)生間包管合同范本
- 機(jī)械制造基礎(chǔ)模擬考試題(附參考答案)
- 茶藝師五級模擬習(xí)題+答案
- 安全生產(chǎn)應(yīng)知應(yīng)會知識習(xí)題庫及答案
- 加盟費合同范本
- 廠房場地租賃合同范本
- 出資不經(jīng)營合同范本
- 公司工程竣工內(nèi)部預(yù)驗收實施細(xì)則
- 監(jiān)理日志表(標(biāo)準(zhǔn)模版)
- H3C-CAS虛擬化平臺詳細(xì)介紹
- 藥房品種類別及數(shù)量清單
- 玻璃工藝學(xué)第4章 玻璃的性質(zhì)
- 四川省藥械集中采購及醫(yī)藥價格監(jiān)測平臺操作指引
- 機(jī)關(guān)檔案管理工作培訓(xùn)PPT課件
- 大學(xué)生安全教育課件(ppt共41張)
- 初中物理人教版八年級下冊 第1節(jié)牛頓第一定律 課件
- 網(wǎng)站培訓(xùn)內(nèi)容trswcm65表單選件用戶手冊
- 空調(diào)系統(tǒng)維保記錄表格模板
評論
0/150
提交評論