сравнить даты макропеременных, не работающих в sas - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужна помощь при сравнении двух макропеременных дат.Ниже приведен код.Из журнала видно, что MINDT_AS_DATE_MINUS_ONE_DT1 - 23 июля 2012 года, а TESTDT1 - 01 января 2013 года.Однако при сравнении SAS говорит 23 июля 2012 года <01 января 2013 года.ЛОЖЬ.Я очень смущен.Спасибо </p>

%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;

Не работает в журнале, см .:

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 голосов
/ 22 февраля 2019

Реквизит в 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;
...