在使用SAS进行数据处理分析之前,首先需要获取数据。
读入外部的分隔符数据文件进SAS是常用的一种方式。一般使用data步中的infile语句或者proc import过程步。
这里先学习infile语句的方式,介绍几个infile语句中的选项。
infile语句放在data步input语句的前面,形式一般为:
infile "file_pathway" options;
file_pathway是文件的完整路径,options是一些选项设置,下面我们挑选几个常用的进行说明。
-
firstobs=
firstobs=告知SAS从第几行开始读取数据。例如,有些外部文件第一行是列名,但我们不想读入,从第2行开始读入:
infile "file_pathway" firstobs = 2;
- obs=
当我们想读入部分数据,可以使用obs=选项,它告知SAS读到哪一行停止。例如,obs=100表示读取100行数据。
infile "file_pathway" obs = 100;
obs=可以和firstobs=配合读取文件的中间数据。
- MISSOVER
默认情况下,SAS读取完一行,如果还有变量没有赋值,会转到下一行继续读取。MISSOVER告知SAS,不要转到下一行,剩余未赋值变量分配缺失值。
data hahaha;
infile cards missover;
input var $ value1 value2 value3 ;
cards;
apple 1324 3556 98
banana 23 11
orange 34
;
run;
proc print data =hahaha noobs;title; run;
打印结果:
| var | value1 | value2 | value3 |
|---|---|---|---|
| apple | 1324 | 3556 | 98 |
| banana | 23 | 11 | . |
| orange | 34 | . | . |
- TRUNCOVER
适用于列输入(指定变量起始结束列数)和格式化输入方式读取数据时,一些数据行比其他行短的情况。
默认情况下,SAS会转到下一行继续为这个变量读取数据。
TRUNCOVER选项告诉SAS,读取数据时,直到行结尾时,或者格式或者列指定范围最后1列,停止读取。
使用书中例子进行说明:
data fafafafa;
infile cards truncover;
input name $ 1-15 number 16-19 street $ 22-37 ;
cards;
John Garcia 114 Maple Ave.
Sylvia Chung 1302 Washington Drive
Martha Newton 45 S.E. 14th St.
;
run;
proc print data =fafafafa noobs;title; run;
打印结果:
| name | number | street |
|---|---|---|
| John Garcia | 114 | Maple Ave. |
| Sylvia Chung | 1302 | Washington Drive |
| Martha Newton | 45 S.E. | 14th St. |
如果没有truncover选项,第一个和第三个观测将去下一行读取数据。
- TRUNCOVER和MISSOVER
- 如果原始数据行在变量作用域开始前结束,两者都为变量分配缺失值;
- 如果原始数据行在变量作用域中间结束,
TRUNCOVER尽量读取可用数据,MISSOVER直接分配缺失值。