2009-02-18 434 views
4

有没有方法可以测试变量是否会导致SAS中的INPUT转换过程失败?或者,如果可以避免产生的“注意:无效参数”消息?避免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; 

回答

5

只包括“??”格式名称之前。你的榜样已经低于修改...

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; 
+1

我认为使用单个会更好?而不是双?在输入功能中。这样,他仍然可以访问_error_变量以用于数据步骤中的其余逻辑。否则,_error_将保持为0。 – cmjohns 2009-03-11 17:38:20

1

而是做这种方式,你可以在第一对待你作为一个字符变量变量(因为你知道的一些价值观是不是真正的日期反正),然后用the macro provided by AFHood帮你找到无效值,然后修复这些值,然后在所有数据都清理完毕后将该变量转换为数字型变量。

+0

感谢这个 但是日期由一系列的大来直接,列分隔平文件 - 如果我要读取数据两次,这将显着增加处理时间。 此外,(我可能是错的),但不会在转换资源方面更高效? – 2009-02-19 10:29:51

0

你可以检查使用类似以下内容:

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;