SAS数据的导入(4)
2020-06-24 本文已影响0人
overmoon
读取部分文件与 infile
选项控制
1.读取原始数据文件的一部分
* 使用单尾 @ ;
data freeways;
infile 'd:\SAS\lianxi\MyRawData\Traffic.dat';
input type $ @;
if type = 'surface' then delete;
input name $ 9-38 amtraffic pmtraffic;
run;
proc print data=freeways;
title 'traffic for freeways';
run;
这里用了两个 input
及单尾 @
。第一个 input
用来读取 type 并以单尾 @
结尾。当使用 if
来测试的时候,可以保持每行数据。第二个 input
则读取其他变量。如果一个观测的 type = surface,第二个input
不会被执行。
- 单尾
@
:
告知SAS保持那行数据,然后可以用if
语句来测试该观测,以确定是否需要保留。既为后续的input
保留一行数据。 - 双尾
@@
:
在SAS开始生成新的观测时,也为后续的input
语句保持那行数据,也就是可从一行数据中读取多个观测。 - 列指针
@n
:
表示在读取数据时,先将指针移动到第n
列,再开始读取数据。
2.在 infile
语句中使用选项控制输入
-
firstobs=
告知SAS从第几行开始读取数据
data icecream;
infile 'd:\SAS\lianxi\MyRawData\IceCreamSales.dat' firstobs=3;
input flavor $ 1-9 location boxessold;
run;
-
obs=
告知SAS到达哪一行时停止读取
* 从第三行开始读,读到第五行停止;
data icecream;
infile 'd:\SAS\lianxi\MyRawData\IceCreamSales.dat' firstobs=3 obs=5;
input flavor $ 1-9 location boxessold;
run;
-
missover
告知SAS当一行数据读完的时候不要转到下一行,而是为其余的变量分配缺失值。 -
truncover
当使用列输入或者格式化输入读取数据时,一些数据行比其他行短的时候,需要使用truncover
。如果一个变量字段超过了数据行的结尾,SAS默认将转到下一行继续读取数据,这时使用truncover
告知SAS为变量读取数据,直到遇到数据行的结尾,或者遇到了列范围指定的最后一列,两者以先遇到为准。
参考文献
The Little SAS Book,Fifth Edition