Если вы хотите использовать макрос в середине оператора, например:
newdate = %simple(x);
, то макрос может выдавать только часть оператора.Это не точка с запятой.
В этом случае, если вы определите макрос для генерации вызова INTNX (), вы можете использовать его таким образом в операторе присваивания.
%macro simple(value);
intnx('month',%sysfunc(today()),&value,'same')
%mend simple;
Поэтому, если сегодня () - 20NOV2018, то вы эффективно выполняете этот действительный оператор SAS на своем шаге данных.
newdate = intnx('month',21508,x,'same') ;
Обратите внимание, как имя переменной X передается в макроси что используется в сгенерированном фрагменте кода SAS.
Конечно, ваш макрос теперь бесполезен, если вы хотите попробовать использовать его вне оператора SAS.