Search code examples
sassas-macro

Transform literal date parameter to SAS date value in macro


I want to create a SAS macro which takes a literal date (eg. '31may2011'd) as parameter. Inside the macro I want to transform this into a SAS date value (eg. 18778).

%macro transLiteralDate2Value(literal=);  
  %put literal = &literal.;  
  %put sasdatavalue = ???;  /* how to calculate this value ? */  
%mend;  
%transLiteralDate2Value(literal='31may2011'd);

Is the are elegant way to achieve this? Of course I could do this by parsing the literal string, but I think there must be a better way.

I use SAS 9.1.3


Solution

  • You can do it using the %sysfunc macro function.

    %macro transLiteralDate2Value(literal=);  
      %put literal = &literal.;  
      %put sasdatavalue = %sysfunc(putn(&literal.,8.));
    %mend;
    %transLiteralDate2Value(literal='31may2011'd);