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;
有类似命名的宏变量,如 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;