【问题标题】:Avoiding a SAS error message: "NOTE: Invalid argument to function INPUT"避免 SAS 错误消息:“注意:函数 INPUT 的参数无效”
【发布时间】:2009-02-18 17:33:29
【问题描述】:

有没有办法测试一个变量是否会导致 SAS 中的 INPUT 转换过程失败?或者,如果可以避免生成的“注意:无效参数”消息?

data _null_;  
format test2 date9.;  
input test ;  
test2=INPUT(PUT(test,8.),yymmdd8.);  
if _error_ =1 then do;  
    _error_=0;  
    test2=INPUT(PUT(test-1,8.),yymmdd8.);  
end;  
put test2=;  
cards;  
20270229  
run;  

【问题讨论】:

    标签: input sas


    【解决方案1】:

    只需包含“??”在格式名称之前。您的示例已在下面进行了修改...

    data null;
    format test2 date9.;
    input test ;
    test2=INPUT(PUT(test,8.),?? yymmdd8.);
    if error =1 then do;
    error=0;
    test2=INPUT(PUT(test-1,8.), ?? yymmdd8.);
    end;
    put test2=;
    cards;
    20270229
    run;
    

    【讨论】:

    • 我觉得用一个会更好?而不是双倍??在输入函数中。这样,他仍然可以访问 error 变量以用于数据步骤中的其余逻辑。否则 error 将保持为 0。
    【解决方案2】:

    您可以先将变量视为字符变量(因为您知道其中一些值不是真实日期),而不是这样做,然后使用the macro provided by AFHood 帮助您找到无效值,然后修复这些值,然后在所有数据都干净后将变量转换为数字 var。

    【讨论】:

    • 感谢您的支持 但是,日期直接来自一系列大的、以列分隔的平面文件 - 如果我要读取两次数据,这将显着增加处理时间。另外,(我可能错了)但就转换资源而言,上述方法不是更有效吗?
    【解决方案3】:

    您可以使用以下内容进行检查:

    data null;
      format test2 date9.;
      input test ;
      test2=INPUT(PUT(test,8.),yymmdd8.);
      **if test ne '' and nmiss(test2)** then test2=INPUT(PUT(test-1,8.),yymmdd8.);
      put test2=;
    cards;
    20270229
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 2020-11-11
      • 2014-05-28
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多