【问题标题】:Import Error even when variable is dropped SAS即使变量被删除 SAS 也导入错误
【发布时间】:2018-08-21 23:33:21
【问题描述】:

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

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 个数字后跟四个字符,它在日志中返回此错误

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 导入。

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

【问题讨论】:

    标签: import sas proc sas-studio


    【解决方案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 在导入之前扫描整个文件,这样更有可能是正确的。如果您要自动执行此过程并多次读取文件,则在验证数据后从日志中获取代码并使用该代码而不是 PROC IMPORT。

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

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

    【讨论】:

    • 明天早上我必须这样做,因为今晚我太累了。一天的编码让我很快筋疲力尽。问题在于 proc 方法和频率,我假设它已经读得很好,但唯一知道的方法是知道我直到今天才看到的 txt 分隔文件,感谢建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多