2.5-2.9
數(shù)據(jù)讀取方式:List input, Column input, Formatted input, Mix input
List input(列表輸入形入、自由格式輸入):適合原始數(shù)據(jù)文件中所有值之間都被至少一個(gè)空格分隔開圆凰。局限性:你必須讀取一條記錄中的全部數(shù)據(jù)哥童,不能跳過(guò)不需要的值,任何缺失值都必須用句點(diǎn)標(biāo)識(shí);字符型數(shù)據(jù)不能有內(nèi)嵌的空格萝勤,長(zhǎng)度不超過(guò)8個(gè)字符;包括日期或其他需要特殊處理的數(shù)據(jù)呐伞,不適合敌卓。? input Name $ Age Height;
?Column input(列輸入):適于讀取數(shù)據(jù)文件所有值或表示缺失值的句點(diǎn)之間沒(méi)有空格(或其他分隔符)的文件,所有值都是字符型或標(biāo)準(zhǔn)數(shù)值型伶氢。優(yōu)勢(shì):①值之間無(wú)須空格趟径;②缺失值可以留空;③字符數(shù)據(jù)可以內(nèi)嵌空格(沒(méi)說(shuō)數(shù)值型可以內(nèi)嵌空格鞍历,估計(jì)是不可以吧)舵抹;④可以跳過(guò)不需要的變量。調(diào)查數(shù)據(jù)非常適合列輸入進(jìn)行讀取數(shù)據(jù)劣砍。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? input Name $ 1-10 Age 11-13? Height 14-18;*1-10表示該變量的列范圍惧蛹;
Formatted input(格式化輸入 ):最復(fù)雜,可以讀取諸如日期的特殊數(shù)據(jù)。?input Name $10.? Age 3.? Height 5.1 Birthdate MMDDYY10.? Acreage COMMA9.? ;
Mix input(混合輸入):結(jié)合實(shí)際同時(shí)靈活應(yīng)用以上三種方式香嗓。? ? input Name $1-22 State $??Acreage COMMA9.? ;
輸出格式:字符迅腔,數(shù)值,日期
字符:Name? $w.?Name是名稱靠娱,w是總長(zhǎng)度,? $表示是字符型沧烈。例如:Wang $10.
數(shù)值:Name? w.d? ?Name是名稱,w是總長(zhǎng)度, d是小數(shù)位數(shù)像云,例如:Heigh 5.1? ? Age 3.
日期:Name? w.??例如:Birthdate MMDDYY10.
+1表示跳過(guò)一列锌雀。
常用輸入格式
2.10讀取混雜的原始數(shù)據(jù)
The @‘character’column pointer(列指針)和The colon modifier(冒號(hào)修飾符)? ?和?@n??
? ? ?指將指針移到到特定的列,@40?指移到到第40列迅诬,@‘Breed:’指某種信息總出現(xiàn)在單詞Breed之后腋逆,指針移到單詞Breed之后。
?input @'Breed:' DogBreed$; *狗品種信息總出現(xiàn)在單詞Breed之后,$表示此為字符變量侈贷;
?(在變量名長(zhǎng)度超過(guò)8個(gè)字符時(shí)可?惩歉,需為字符變量制定輸入格式)?
?input?@'Breed:' DogBreed$20.;*$20.? ? ?SAS連續(xù)讀取20個(gè)字符俏蛮,無(wú)論其中是否含有空格撑蚌;
? input?@'Breed:' DogBreed:$20.;*:$20.? SAS讀取到空格或數(shù)據(jù)行結(jié)束為止(最多讀取20個(gè)字符)搏屑;
2.11?為每個(gè)觀測(cè)值讀取多行原始數(shù)據(jù)
行指針:斜線(/)和#n争涌。
/?指示跳到下一個(gè)原始數(shù)據(jù)行; #n 指跳到指定的行睬棚,即第n行第煮。??
?input city $ state $
? ? ? ? ? ? ?/ NormalH? NormalL
? ? ? ? ? #3 RecordH RecordL; */告訴SAS在讀NormalH?和?NormalL前轉(zhuǎn)到第二行第一列解幼,#n3指轉(zhuǎn)到第三行第一列抑党;
2.12?為每行原始數(shù)據(jù)讀取多個(gè)觀測(cè)值:
Line-hold specifier(行固定標(biāo)識(shí)符):@@
如果每行原始數(shù)據(jù)有多個(gè)觀測(cè),可以在input語(yǔ)句結(jié)尾處使用@@撵摆。?使用了@@底靠,SAS不會(huì)為每個(gè)觀測(cè)自動(dòng)進(jìn)入原始數(shù)據(jù)的新一行。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?input city $ state $ NormalRain? MeanDaysRain @@;
2.13?讀取原始文件的一部分
用@結(jié)束input語(yǔ)句特铝,告訴SAS暑中,保留那行原始數(shù)據(jù)。然后可用IF語(yǔ)句來(lái)判斷是否是你需要保留的觀測(cè)數(shù)據(jù)鲫剿,如果是鳄逾,則使用第二個(gè)input語(yǔ)句讀取變量數(shù)據(jù)。
input Type $ @;
if Type='surface' Then delete;
input Name $ 9-38 AmTraffic?PMTraffic;
2.13?在infile語(yǔ)句中使用選項(xiàng)控制輸入
(1)“FFIRSTOBS=? ”告知SAS從第幾行開始讀取數(shù)據(jù)灵莲。 infile 'C:\Mylib\Allscore.dat' FIRSTOBS=3;
(2)“OBS= ”? ?告知SAS在哪一行時(shí)停止讀取雕凹。? ? ? infile 'C:\Mylib\Allscore.dat' FIRSTOBS=3? obs=5;
(3)"MISSOVER"告知SAS,當(dāng)一行數(shù)據(jù)讀完的時(shí)候不要轉(zhuǎn)到下一行,而是為其余變量分配缺失值枚抵。
? ? ? ? ? ? ? ? ? ? ? ? ? ?infile 'C:\Mylib\Allscore.dat'?MISSOVER;?
?而默認(rèn)情況下线欲,當(dāng)SAS讀完一行數(shù)據(jù)后,如果input語(yǔ)句中還有一些變量沒(méi)有賦值汽摹,SAS將轉(zhuǎn)到下一個(gè)數(shù)據(jù)行讀取數(shù)據(jù)李丰。
(4)“TRUNCOVER”告知SAS為變量讀取數(shù)據(jù),直到遇到了數(shù)據(jù)行的結(jié)尾逼泣,或者遇到了在格式或列范圍指定的最后一列趴泌,二者以先遇到為準(zhǔn)。在默認(rèn)情況下拉庶,如果一個(gè)變量的字段超出了數(shù)據(jù)行的結(jié)尾踱讨,SAS將轉(zhuǎn)到下一行繼續(xù)讀取數(shù)據(jù)。(數(shù)據(jù)行結(jié)束指實(shí)際數(shù)據(jù)行結(jié)束了砍的,變量字段長(zhǎng)度是預(yù)先設(shè)定的變量作用域)
? ? ? ? ? ? ? ? ? ? ? ?infile 'C:\Mylib\Allscore.dat'?TRUNCOVER;
?如果數(shù)據(jù)行在變量作用域開始前就結(jié)束了痹筛,"MISSOVER"?和? “TRUNCOVER”都會(huì)為變量分配缺失值;但如果數(shù)據(jù)行在變量作用域中間結(jié)束時(shí)廓鞠,“TRUNCOVER”將盡量讀取可用數(shù)據(jù)帚稠,"MISSOVER"?則直接為變量分配缺失值。
(5)“DELIMITER”或“DLM=”選項(xiàng)能夠讀取其他分隔符的文件床佳。(列表輸入可以讀取用空格分隔的數(shù)據(jù)) 滋早。如果分隔符是字符串,用“DLMSTR=”砌们。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? infile'C:\Mylib\Allscore.dat'? DLM=',' ;?infile?'C:\Mylib\Allscore.dat'? DLM='&' ;
? ? ? ? ? ? ? ? ? infile?'C:\Mylib\Allscore.dat'? DLMSTR='ABC' ;
? ? ? ? ? ? ? ? ?infile?'C:\Mylib\Allscore.dat'? DLM='09'X ;*使用制表符作為分隔符杆麸;
(6)“DSD”它忽略用引號(hào)括起來(lái)的數(shù)據(jù)值中的分隔符;不會(huì)把引號(hào)作為數(shù)值的一部分讀壤烁小昔头;把兩個(gè)連續(xù)的分隔符視為缺失值。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? infile 'file-specification' DLM='09'XDSD;*讀取一個(gè)制表符分隔的ASCII文件影兽;
CSV文件揭斧,用逗號(hào)作為分隔符,可以用“DSD”選項(xiàng)讀取峻堰,連續(xù)的逗號(hào)表示缺失值讹开;如果數(shù)據(jù)值包含逗號(hào),則數(shù)值會(huì)被放在引號(hào)中捐名。infile 'C:\Mylib\Bands.csv' DLM=',' DSD;