目錄windows
將數據導入SAS的方法有不少,但能夠概括爲四個基本類別,其中方法二、3是須要掌握的重點。編輯器
導入嚮導默認數據第一行做爲變量名稱,並會自動掃描文件來決定變量的類型ide
使用導入嚮導導數通常分如下幾個步驟:工具
根據原始數據存儲的不一樣位置,能夠分爲內部原始數據、外部原始數據。用infile
語句來指定元數數據位置。學習
內部原始數據ui
若是在SAS程序中輸入數據,則這些數據被稱爲內部原始數據,使用「datalines語句」代表它。需注意的是,datalines語句必須是data步最後一條語句,其後的全部行都將被視爲數據行,直到遇到一個分號(;)爲止。unix
*將內部原始數據讀入到SAS數據集; data work.testdata; input president $ party $ number; /* 輸入指定類型的3個變量 */ datalines; /* 數據線 */ Adams F 2 Lincoln R 16 Grant R 18 kennedy D 35 ; run;
外部原始數據指針
更常見數據是保存在外部文件中,這時數據與程序是分離的,就稱爲外部原始數據。須要用「infile語句」告知SAS文件名和路徑,infile語句緊跟在data語句以後,input語句以前,且不一樣操做環境中路徑表示有差別:日誌
操做環境 | infile語句 |
---|---|
windows | infile 'D:\code\test.dat'; |
unix | infile '/home/rds/test.dat'; |
os | infile 'mydir.test.dat'; |
長記錄code
當從外部數據文件讀入數據時,務必記得「檢查日誌」,由於一些很是有價值的信息,會在日誌中體現,如觀測數、變量數、記錄最大/最小長度。
若外部文件中記錄長度超過了256個字符,且SAS沒有讀取到全部數據,這時能夠在infile語句中使用lrecl=
選項,指定一個至少和數據文件中最長記錄等長的長度。
*從外部原始數據讀入數據到SAS數據集; data work.testdata; infile infile 'D:\code\test.dat' lrecl = 300; /* 指定記錄長度最大爲300個字符 */ input president $ party $ number; run;
若是原始數據文件中的全部值,都被至少一個空格分隔開,建議使用列表輸入(list input)讀入該原始數據,該方法也被稱爲自由格式輸入。
下面是列表輸入的優缺點:
特別注意,列表輸入也可用於讀取其餘分隔符數據文件,如逗號或製表符。而且,可使用length語句去覆蓋長度不超過8個字符的限制,使字符變量長度變成1 ~ 32767之間任意值。
INPUT語句
列表輸入是經過input語句實現數據讀入,語法規則以下:
示例:input toadname $ weight jump1 jump2 jump3;
*使用列表輸入,讀取數據文件ToadJump.dat; data toads; infile 'D:\code\ToadJump.dat'; input toadname $ weight jump1 jump2 jump3; run; proc print data = toads; title '蟾蜍跳躍比賽'; run;
列輸入和列表輸入相似,但適用範圍更廣,具備如下幾點優點:
一般調查數據、帶有街道地址的數據集,可採用列輸入讀取。
INPUT語句
列輸入也是經過input語句實現數據讀入,語法規則和列表輸入相似,區別在於變量以後須要列出該變量對應的列或者列範圍,用這些列表示數值或者字符在數據行中的位置。
示例:input Name ¥ 1-10 Age 11-13 Height 14-18;
先明確一個概念「標準格式數據」,只包含數字、小數點、正負符號、科學計數法E。其餘的都是非標準格式數據,常見的有:
日期
嵌入逗號的數字
嵌入$符號的數值
輸入格式
輸入格式的三個基本類型是:字符、數值、日期
字符 | 數值 | 日期 |
---|---|---|
$informatw. | informatw.d | informatw. |
$代表這是字符型輸入格式,imformat是該輸入格式的名稱,w是總寬度,d是小數位數(僅限數值型輸入格式),注意,必定不要少些了句點(.)。有兩個輸入格式沒有名稱:
格式化輸入
在input語句的變量名稱以後放置輸入格式,稱爲格式化輸入。
示例:input name $10. age 3. height 5.1 birthdate mmddyy10. ;
先明確一個概念:爲每一個變量讀取的列,由起始點和輸入格式的寬度所決定。因此,上面的示例代碼就能解讀爲:
*讀取非標準格式的原始數據; data zdata.contest; infile 'D:\data\sas_file\pumpkin.dat'; input name $16. age 3. +1 type $1. +1 date mmddyy10. /* +1表示跳過一列 */ (score1 score2 score3 score4 score5) (4.1); run;
有相同輸入格式,把變量和輸入格式分別放到括號中,輸入格式只列出一次 便可。
更多常見的常見輸入格式見page49,第二章 2.8 經常使用輸入格式。
前面學習了三種主要的輸入樣式:
由於SAS中數據格式多種多樣,沒有一種輸入樣式能知足絕大多數需求。所,更多時候咱們採用混合的樣式輸入。
示例:input parkname $ 1-22 state $ year @40 acreage comma9. ;
上面的示例就採用了多種樣式的組合:
此外,還用了列指針,語法@n,n指SAS要移動到的列,經常使用來在一行數據裏向前或者向後移動,以調整數據讀取起始位置,應用場景有: