Вы смешиваете код макроса и код шага данных способом, который не поддерживается в SAS.Если вы хотите присвоить макропеременной значение, которое вы генерируете как часть шага данных, вам нужно использовать call symput
.
Кроме того, если вы создаете макро-переменную во время шага данных, вы не можете разрешить ее во время того же шага данных, как вы пытаетесь это сделать (если вы не используете функцию resolve
...),Для этого проще просто использовать переменную набора данных.
Итак, вот фиксированная версия вашего кода, которая, я думаю, вероятно, делает то, что вы хотите:
%macro m(input);
data &input.;
set &input.;
array var_array[*] var:;
array_dim = dim(var_array);
/*Only export the macro variable once, for the first row*/
if _n_ = 1 then call symput('array_dim_mvar', array_dim);
do i = 1 to array_dim;
var_array[i] = var_array[i] + 1;
end;
drop i;
run;
data example2;
set example2;
var2 = var * &array_dim_mvar;
run;
%mend;
%m(example1);