首页 文章

即使变量被删除SAS也导入错误

提问于
浏览
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;

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

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导入的简易性 .

但我也在问这是否会影响我的导入?因为检查输出时数据似乎很好 .

1 回答

  • 1

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

    糟糕的想法,垃圾输入=垃圾输出,你只处理32个变量,所以实际上并没有那么糟糕 . 花点时间清理并正确导入数据,并了解流程中的数据,加快进一步分析 . 这一步不是浪费时间 . 导入数据集后,最好运行PROC MEANS和PROC FREQ并检查输出以确保正确读取 .

    proc means data=have;
    run;
    
    proc freq data=have;
    run;
    

    在PROC IMPORT中设置 GUESSINGROWS=MAX . 这会强制SAS在导入之前扫描整个文件,这样更可能是正确的 . 如果你're automating this process and reading the file more than once, then take the code from the log and use that instead of PROC IMPORT, once you'已经验证了数据 .

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

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

相关问题