如何根据条件调用宏变量

时间:2015-03-06 15:18:52

标签: sas sas-macro

我在SAS中有一个数据集

  • 变量条件,可以取“01”,...,“20”中的值
  • i 索引的几个变量,例如 var01 ,..., var20

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

我试过

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

但是它不起作用...最好用一些具有解析指令的尝试我得到一个值等于'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;

由于

3 个答案:

答案 0 :(得分:3)

使用vvaluex函数的另一种解决方案,不使用数组:

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

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

答案 1 :(得分:1)

您不能以这种方式使用宏变量 - 它必须在数据步骤之外定义。

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

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

答案 2 :(得分:0)

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

理念是

%Macro cond;

%do i = 1%到20;

如果条件="& i"然后out_var = in_& var;

%端;

%好转;

在数据步骤中使用此宏。

我希望这可以解决你的目的。