SAS编程-小知识:import过程步的Guessingrows选项

最近项目的一个Raw Data的为txt的文本格式,首行为变量名,变量以及变量值以Tab间隔。

Dummy 数据

直接使用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茶谈!
若有疑问,欢迎评论交流!

你可能感兴趣的:(SAS编程-小知识:import过程步的Guessingrows选项)