如何根据条件调用宏变量

How to call a macro variable based on a condition

我在 SAS 中有一个数据集

我想做的是创建一个新变量 total 等于 vark if condition= k。我可以通过几个 if...else 语句来做到这一点(这是我现在所做的),但我没有设法以更紧凑和优雅的方式做到这一点。

我试过了

data want;
set have;
    call symput(condition, temp);
    total=var&temp;
run;

但它不起作用...充其量我会尝试一些解析指令,我会得到一个 total 等于 'var01' 的值等等,但只是字符,而不是与变量关联的值 var01

我的目标是比

做得更好
data want  ;
set have (keep=noi nomen var01-var20 lprm condition ag);
if condition="01" then varpr=var01;
else if condition="02" then varpr=var02;
else if condition="03" then varpr=var03;
else if condition="04" then varpr=var04;
else if condition="05" then varpr=var05;
else if condition="06" then varpr=var06;
else if condition="07" then varpr=var07;
else if condition="08" then varpr=var08;
else if condition="09" then varpr=var09;
else if condition="10" then varpr=var10;
else if condition="11" then varpr=var11;
else if condition="12" then varpr=var12;
else if condition="13" then varpr=var13;
else if condition="14" then varpr=var14;
else if condition="15" then varpr=var15;
else if condition="16" then varpr=var16;
else if condition="17" then varpr=var17;
else if condition="18" then varpr=var18;
else if condition="19" then varpr=var19;
else if condition="20" then varpr=var20;
run;

谢谢

您不能那样使用宏变量 - 它必须在数据步骤之外定义。

但是,如果我理解您的目的,您可以为此使用数组。

data want;
  set have;
  array var[20] var01-var20;
  total=var[condition];
run;

一个不同的解决方案,不使用数组,使用 vvaluex 函数:

varpr = vvaluex(catt('var', condition));

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002233818.htm

在这里你可以创建一个带循环的小宏。

想法是

%宏观条件;

%do i=1 %to 20;

如果 condition="&i" 那么 out_var=in_&var;

%结束;

%修复;

在数据步骤中使用此宏。

希望能解决你的问题