使用SAS宏检查有效日期

时间:2016-05-17 03:24:38

标签: sas sas-macro

我编写了一个宏来检查无效日期并将其设置为'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 ;

感谢

1 个答案:

答案 0 :(得分:2)

存在不同的方法......

我建议您阅读this paper,其中会说明与?一起使用的??input()信息修饰符。

除其他途径之外,您可以首先使用格式为input()的{​​{1}},然后检查它是否在8.19600101之间(或者以哪个数字为准) (仅适用),然后只使用20250101执行input()

如果您想要更加彻底,可以将yymmdd8.与3个子字符串一起使用,并分别检查年,月,日部分(使用input()between 1960 and 2020等)。