Search code examples
sassas-macro

SAS does not evaluate the content of %PUT


I use this bit outside of any DATA step.

%let sth = 20191111;
%let sthelse=SUBSTR(INPUT(&sth.,12.),1,4);
%put &sthelse.;

It does not yield '2019', which I would expect but rather

SUBSTR(INPUT(20191111,12.),1,4)

What goes wrong here?


Solution

  • There isn't macro function named substr and input, this function is "data step functions". You should use %sysfunc statement. And macro variables stores as text, so you shouldn't use input function on it.

    %let sth = 20191111;
    %let sthelse=%sysfunc(SUBSTR(&sth.,1,4));
    %put &=sthelse.;
    

    STHELSE=2019

    UPDATE(thanks @Tom):

    There is macro function %substr, so you can use %SUBSTR(&sth.,1,4) instead of %sysfunc(SUBSTR(&sth.,1,4)).