Wenn man in einem %let eine Base SAS Funktion verwendet, dann wird die Teil des Textes in der Makrovariablen; sie wird NICHT ausgeführt.
Erst wenn man die Makrovariable in einem DATA Step verwendet, kommt es nach der Code-Ersetzung und dem Compile des DATA Step zur Ausführung der Funktion.
Um eine Base SAS Funktion in einem %let sinnvoll zu verwenden, muss man sie in %sysfunc "einpacken". Da das oft unübersichtlich wird, ist man mM besser dran, einen DATA _NULL_ mit CALL SYMPUT zu verwenden:
%let mon=201604;
data _null_;
monatsmitte = intnx('month',input("&mon.01",yymmdd8.),0,'m');
call symput('monatsmitte',put(monatsmitte,yymmddn8.));
run;
%put &monatsmitte.;
... View more