数据示例1; 输入var1 var2 var3; datalines; 10 11 14 3 5 8 0 1 2;
数据示例2; 输入变量; datalines; 1 2 8;让我们说var变量的数量……
您正在以SAS不支持的方式混合宏代码和数据步骤代码。如果要为宏变量分配一个您在数据步骤中生成的值,则需要使用 call symput 。
call symput
此外,如果您在数据步骤中创建宏变量,则无法在您尝试执行的相同数据步骤中解析它(除非您使用 resolve 功能...)。为此使用数据集变量更容易。
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);