比较无法在SAS中使用的宏变量日期

时间:2019-02-21 21:04:36

标签: sas

我需要比较两个宏变量日期的帮助。下面是代码。从日志中可以看到MINDT_AS_DATE_MINUS_ONE_DT1是2012年7月23日,TESTDT1是2013年1月1日。但是,比较SAS时,请说23JUL2012 <01JAN2013。是FALSE。我很困扰。谢谢

%let TESTDT=2013-01-01;
%let TESTDT1=%sysfunc(inputn(&TESTDT, yymmdd10.), date9.);
%LET MINDT = 2012-07-23;
%LET MINDT_AS_DATE = %SYSFUNC(INPUTN(&MINDT., YYMMDD10.));
%LET MINDT_AS_DATE_MINUS_ONE = %SYSFUNC(INTNX(MONTHS, &MINDT_AS_DATE., -1));
%LET MINDT_AS_DATE_MINUS_ONE_DT = %SYSFUNC(INPUTN(&MINDT., YYMMDD10.));
data _null_;
MINDT_AS_DATE_MINUS_ONE_DT=&MINDT_AS_DATE_MINUS_ONE_DT.;
call symput('MINDT_AS_DATE_MINUS_ONE_DT1',put(MINDT_AS_DATE_MINUS_ONE_DT,date9.));
run;
%macro intermediate;
   %if &MINDT_AS_DATE_MINUS_ONE_DT1.<&TESTDT1. %then
      %do;      
     %PUT this is true;
      %end;
   %else 
      %do;
      %PUT this is false;
      %end;
%mend intermediate;
%intermediate;

不适用于LOG,请参阅:

SYMBOLGEN:  Macro variable MINDT_AS_DATE_MINUS_ONE_DT1 resolves to 23JUL2012
SYMBOLGEN:  Macro variable TESTDT1 resolves to 01JAN2013
MLOGIC(INTERMEDIATE):  %IF condition &MINDT_AS_DATE_MINUS_ONE_DT1.<&TESTDT1. is FALSE
MLOGIC(INTERMEDIATE):  %PUT this is false
this is false

1 个答案:

答案 0 :(得分:2)

Reeza道具

%macro intermediate;
    %if %sysevalf("&MINDT_AS_DATE_MINUS_ONE_DT1."d < "&TESTDT1."d) %then %do; 
        %PUT this is true;
    %end;
    %else %do;
        %PUT this is false;
    %end;
    %mend intermediate;

    %intermediate;