我编写了一个宏来检查无效日期并将其设置为'11111111',但出现意外注意:函数INPUT的参数无效。注意的原因是,源数据的日期为“0212-04-26”,超出SAS日期范围A.A. 1582至A.D.19,900。所以现在我正在寻找没有任何消息的无效日期。
我的代码:
%macro chkdate(datefld=, num_date=) ;
/* invalid date gets set to '11111111' */
if &datefld ne '0001-01-01' then do ;
t_date = input(compress(&datefld, '-'), yymmdd8.) ;
if t_date eq . then do ;
%errors( key_desc=Invalid Date, fname=&datefld,)
&datefld = '11111111' ;
end;
end;
%mend chkdate ;
感谢
答案 0 :(得分:2)
存在不同的方法......
我建议您阅读this paper,其中会说明与?
一起使用的??
和input()
信息修饰符。
除其他途径之外,您可以首先使用格式为input()
的{{1}},然后检查它是否在8.
和19600101
之间(或者以哪个数字为准) (仅适用),然后只使用20250101
执行input()
。
如果您想要更加彻底,可以将yymmdd8.
与3个子字符串一起使用,并分别检查年,月,日部分(使用input()
,between 1960 and 2020
等)。