数据文件除了空格作为分隔符之外,常见的还有逗号分隔符
的csv
文件和制表符
分隔的excel
文件。
SAS为infile
语句提供了两个易于读取分隔符文件的选项DLM选项和DSD选项。
DLM选项
在infile
语句中使用DLM=
选项或者DELIMITER=
选项可以指定分隔符进行数据的读取。
如果分隔符是字符串
,则可以使用DLMSTR=
选项进行指定。
下面是读取逗号分隔符
的一个例子:
data dt2;
infile datalines delimiter =",";
input year month day ;
datalines;
2012, 12 ,23,
2014, 05 ,,
2014, ,15,
2015 ,09, 12,
;
run;
proc print data =dt2 noobs;title; run;
打印结果:
year | month | day |
---|---|---|
2012 | 12 | 23 |
2014 | 5 | . |
2014 | . | 15 |
2015 | 9 | 12 |
DSD选项
infile
语句中的DSD
(分隔符敏感数据)选项做三件事:
- 忽略引号括起来的数据中的分隔符
- 不会把引号作为数据一部分读取
- 连续两个分隔符视为缺失值
另外注意,DSD
假设文件的分隔符是逗号
,如果不是,可以配合DLM=
进行指定。
CSV
文件是使用DSD
读取的常见文件格式。
用下面这个简单的小例子说明一下:
data temp;
infile datalines dlm ="," DSD;
input Name $ type $ value ;
datalines;
AGHJkd,helasj, 3647
'sghd,sji',hjdeh, 878
Hajsnh,,,
;
run;
proc print data =temp noobs;title; run;
打印结果:
Name | type | value |
---|---|---|
AGHJkd | helasj | 3647 |
sghd,sji | hjdeh | 878 |
Hajsnh | . |
可以看到引号括起来的'sghd,sji'
中的分隔符,
没有被读取,两个连续的分隔符
被认为是缺失值
。
网友评论