Search code examples
sassas-macro

Literal contains unmatched quote


I have a numeric parameter given to my macro and would like to convert it to date, set to end of month and apply a format.

Following code works for many dates, but not for march; throws 'Literal contains unmatched quote'.

proc format;
   picture mydatep
   low-high = "'%0d-%0b-%0Y'" (datatype = date);

%macro test(cycle=);

   %let enddate = %SYSFUNC(intnx(month, %SYSFUNC(inputn(&cycle., yymmn6.)), 0, e), mydatep.);
   %put &enddate.;

%mend;

%test(cycle=201602); /* works --> 29-Feb-2016*/
%test(cycle=201603); /* works not */
%test(cycle=201604); /* works again --> 30-Apr-2016*/

%test(cycle=201402); /* works --> 28-Feb-2014*/
%test(cycle=201403); /* works not */
%test(cycle=201404); /* works again --> 30-Apr-2014*/

I have been using the code for some years now, and never had trouble with it. I am using SAS Analytics Pro 9.4


Solution

  • @Kenji: "Switching to SAS (Deutsch) [engl: SAS (German)], solved the issue. I don't know why, though." The explanation is quite simple, some date formats in German and English differ in just a few cases:

     German        English       equal?
     ----------------------------------------
     01Jan2022     01Jan2022     yes
     01Feb2022     01Feb2022     yes
     01Mär2022     01Mar2022     NO
     01Apr2022     01Apr2022     yes
     ...
     01Okt2022     01Oct2022     NO
     01Nov2022     01Nov2022     yes
     01Dez2022     01Dec2022     NO
    

    So in a German environment, it is a common observation that your code might work in most cases but not for March, October and December.