最近项目的一个Raw Data的为txt的文本格式,首行为变量名,变量以及变量值以Tab间隔。
直接使用import
过程步将数据导入SAS数据集,遇到了问题:数据可以正常导入,但是Log会出现Warning和Error。
proc import datafile = "xxx.txt" out = rawdata replace dbms = tab;
delimiter = " ";
run;
具体是什么原因造成的呢?在导入过程中,一些原始变量被识别成数值变量,但是变量有一些记录为字符“NA”。这些字符记录导入数据集中显示为缺失,同时也造成Log Issue。
为什么有字符“NA”的变量会识别成数值变量呢?这是因为SAS import的机制是先扫描文件靠前的记录,以确定变量的数据类型以及对应的长度,默认是扫描前20行。
这就解释了上面Log Issue的产生的原因:某些变量的前20条记录为数值,SAS扫描记录判断该变量为数值变量,后续读入时遇到字符记录就触发Log Issue。
如何解决这个问题呢?通过Guessingrows=
选项指定一个比较大的扫描行数,这样就可以覆盖变量取值的所有可能性,将靠后记录为字符的变量识别成字符变量。
proc import datafile = "xxx.txt" out = rawdata replace dbms = tab;
delimiter = " ";
guessingrows = max;
run;
Guessingrows=
选项除了可以指定行数外,还可以直接指定“MAX”。不过,指定最大值可能对性能造成影响。
感谢阅读, 欢迎关注:SAS茶谈!
若有疑问,欢迎评论交流!