Вы можете сделать это, но вы, вероятно, пишете макрос неправильно. Вы должны помнить, что макросы SAS по сути являются текстовыми препроцессорами: они вводят написанный вами код и выводят код для подачи в SAS [1].
Итак, вот простой макрос «сложения»:
%macro calculate (var_name, var_value);
&var_name + &var_value;
%mend;
data one;
input a@@;
b = %calculate(a, 3);
c = %calculate(a, a);
cards;
1 3 -2 4
;
run;
proc print data=one;
run;
Средство макроса заменит биты %calculate
кодом, сгенерированным макросом, и SAS фактически увидит следующее:
%macro calculate (var_name, var_value);
&var_name + &var_value;
%mend;
data one;
input a@@;
b = a + 3;
c = a + a;
cards;
1 3 -2 4
;
run;
proc print data=one;
run;
Вы можете увидеть это в файле журнала с помощью оператора options mprint
К сожалению, это не охватит все потенциальные расчеты. Возможно, вы захотите найти в PROC FCMP
способ генерации пользовательских функций / подпрограмм, используемых на шаге DATA.
[1] Я знаю, что это сложнее, чем это, но вы можете далеко подумать, как это.