2.5-2.9
数据读取方式:List input, Column input, Formatted input, Mix input
List input(列表输入、自由格式输入):适合原始数据文件中所有值之间都被至少一个空格分隔开。局限性:你必须读取一条记录中的全部数据,不能跳过不需要的值,任何缺失值都必须用句点标识;字符型数据不能有内嵌的空格,长度不超过8个字符;包括日期或其他需要特殊处理的数据,不适合。 input Name $ Age Height;
Column input(列输入):适于读取数据文件所有值或表示缺失值的句点之间没有空格(或其他分隔符)的文件,所有值都是字符型或标准数值型。优势:①值之间无须空格;②缺失值可以留空;③字符数据可以内嵌空格(没说数值型可以内嵌空格,估计是不可以吧);④可以跳过不需要的变量。调查数据非常适合列输入进行读取数据。 input Name $ 1-10 Age 11-13 Height 14-18;*1-10表示该变量的列范围;
Formatted input(格式化输入 ):最复杂,可以读取诸如日期的特殊数据。 input Name $10. Age 3. Height 5.1 Birthdate MMDDYY10. Acreage COMMA9. ;
Mix input(混合输入):结合实际同时灵活应用以上三种方式。 input Name $1-22 State $ Acreage COMMA9. ;
输出格式:字符,数值,日期
字符:Name $w. Name是名称,w是总长度, $表示是字符型。例如:Wang $10.
数值:Name w.d Name是名称,w是总长度, d是小数位数,例如:Heigh 5.1 Age 3.
日期:Name w. 例如:Birthdate MMDDYY10.
+1表示跳过一列。
常用输入格式
2.10读取混杂的原始数据
The @‘character’column pointer(列指针)和The colon modifier(冒号修饰符) 和 @n
指将指针移到到特定的列,@40 指移到到第40列,@‘Breed:’指某种信息总出现在单词Breed之后,指针移到单词Breed之后。
input @'Breed:' DogBreed$; *狗品种信息总出现在单词Breed之后,$表示此为字符变量;
(在变量名长度超过8个字符时可 ,需为字符变量制定输入格式)
input @'Breed:' DogBreed$20.;*$20. SAS连续读取20个字符,无论其中是否含有空格;
input @'Breed:' DogBreed:$20.;*:$20. SAS读取到空格或数据行结束为止(最多读取20个字符);
2.11 为每个观测值读取多行原始数据
行指针:斜线(/)和#n。
/ 指示跳到下一个原始数据行; #n 指跳到指定的行,即第n行。
input city $ state $
/ NormalH NormalL
#3 RecordH RecordL; */告诉SAS在读NormalH 和 NormalL前转到第二行第一列,#n3指转到第三行第一列;
2.12 为每行原始数据读取多个观测值:
Line-hold specifier(行固定标识符):@@
如果每行原始数据有多个观测,可以在input语句结尾处使用@@。 使用了@@,SAS不会为每个观测自动进入原始数据的新一行。
input city $ state $ NormalRain MeanDaysRain @@;
2.13 读取原始文件的一部分
用@结束input语句,告诉SAS,保留那行原始数据。然后可用IF语句来判断是否是你需要保留的观测数据,如果是,则使用第二个input语句读取变量数据。
input Type $ @;
if Type='surface' Then delete;
input Name $ 9-38 AmTraffic PMTraffic;
2.13 在infile语句中使用选项控制输入
(1)“FFIRSTOBS= ”告知SAS从第几行开始读取数据。 infile 'C:\Mylib\Allscore.dat' FIRSTOBS=3;
(2)“OBS= ” 告知SAS在哪一行时停止读取。 infile 'C:\Mylib\Allscore.dat' FIRSTOBS=3 obs=5;
(3)"MISSOVER"告知SAS,当一行数据读完的时候不要转到下一行,而是为其余变量分配缺失值。
infile 'C:\Mylib\Allscore.dat' MISSOVER;
而默认情况下,当SAS读完一行数据后,如果input语句中还有一些变量没有赋值,SAS将转到下一个数据行读取数据。
(4)“TRUNCOVER”告知SAS为变量读取数据,直到遇到了数据行的结尾,或者遇到了在格式或列范围指定的最后一列,二者以先遇到为准。在默认情况下,如果一个变量的字段超出了数据行的结尾,SAS将转到下一行继续读取数据。(数据行结束指实际数据行结束了,变量字段长度是预先设定的变量作用域)
infile 'C:\Mylib\Allscore.dat' TRUNCOVER;
如果数据行在变量作用域开始前就结束了,"MISSOVER" 和 “TRUNCOVER”都会为变量分配缺失值;但如果数据行在变量作用域中间结束时,“TRUNCOVER”将尽量读取可用数据,"MISSOVER" 则直接为变量分配缺失值。
(5)“DELIMITER”或“DLM=”选项能够读取其他分隔符的文件。(列表输入可以读取用空格分隔的数据) 。如果分隔符是字符串,用“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”它忽略用引号括起来的数据值中的分隔符;不会把引号作为数值的一部分读取;把两个连续的分隔符视为缺失值。
infile 'file-specification' DLM='09'XDSD;*读取一个制表符分隔的ASCII文件;
CSV文件,用逗号作为分隔符,可以用“DSD”选项读取,连续的逗号表示缺失值;如果数据值包含逗号,则数值会被放在引号中。infile 'C:\Mylib\Bands.csv' DLM=',' DSD;