SAS 宏变量解决数据步中的问题

SAS Macro variable resolve issue in datastep

有类似命名的宏变量,如 temp1、temp2 等。

temp1=xyz; temp2=abc;

现在我想将这些宏变量值存储到数据集中。

我试着写了如下内容:

%let n=2;
data current_data;
do=1 to &n.;
myvalues="&&temp&i.";
run;

但是它不起作用。 似乎我没有像 call symput 函数那样在声明的同一个数据集中得到解析。

有人能帮忙吗?

要在数据步骤中的 运行 时间动态检索宏变量的值,请使用 symget() 函数,与 call symputx() 函数相反。您可以使用 cats() 来帮助您从整数值构建宏变量名称。

data current_data;
  do=1 to &n.;
    length myvalues 0;
    myvalues=symget(cats('temp',i));
    output;
  end;
run;

您可以使用宏逻辑生成一些壁纸代码。请注意,您必须定义一个宏才能使用 %DO 循环。

%macro expand;
   data current_data;
     length i 8 myvalues 0;
  %do i=1 %to &n;
     i=&i;
     myvalues="&&temp&i";
     output;
  %end;
   run;
%mend expand;
%expand;