1

我正在导入一个分号分隔的文件

ID    Segment    Number    Date     Payment
1     A1         103RTR    10OCT17  10
2     A1         205FCD    11OCT17  11
...

当我使用以下代码导入此 txt 文件时,SAS 不喜欢数字和字符的混合:

proc import
out=want (drop=Number)
datafile="have"
dbms=dlm
replace;
delimiter=';';
options validvarname=v7 missing='';
run;

即使我没有尝试加载数字,它在真实数据集中要长得多,比如 12 个数字后跟四个字符,它会在日志中返回此错误

NOTE: Invalid data for Number in line 22157 21-30.
 WARNING: Limit set by ERRORS= option reached.  Further errors of this type will not be printed.
 ERROR: Import unsuccessful.  See SAS Log for details.

我想做一个典型的 infile 和 informat 但是有 32 个变量和 200 万行,我只是不能花时间找出每个变量需要读入的范围和样式。所以我问是否有办法格式化该特定变量,但坚持使用 proc 导入的简易性。

但我也在问这是否真的影响我的进口?因为在检查输出时数据看起来很好。

4

1 回答 1

1

我想做一个典型的 infile 和 informat 但是有 32 个变量和 200 万行,我只是不能花时间找出每个变量需要读入的范围和样式。所以我问是否有办法格式化该特定变量,但坚持使用 proc 导入的简易性。

坏主意,垃圾输入 = 垃圾输出,而您只处理 32 个变量,所以实际上并没有那么糟糕。花时间正确地清理和导入数据是有回报的,您会在此过程中了解数据,从而加快进一步分析。这一步不是浪费时间。导入数据集后,最好运行 PROC MEANS 和 PROC FREQ 并检查输出以确保正确读取。

proc means data=have;
run;

proc freq data=have;
run;

GUESSINGROWS=MAX在 PROC IMPORT 中设置。这会强制 SAS 在导入之前扫描整个文件,这样更有可能是正确的。如果您要自动执行此过程并多次读取文件,则在验证数据后从日志中获取代码并使用它而不是 PROC IMPORT。

并且选项语句不应该在 PROC IMPORT 步骤中,它在前面。

options validvarname=v7 missing='';

proc import
out=want (drop=Number)
datafile="have"
dbms=dlm
replace;
delimiter=';';
guessingrows=max;
run;
于 2018-03-13T16:12:22.867 回答