我在SAS中有一个数据集
我想要做的是创建一个新变量 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;
由于
答案 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;
%端;
%好转;
在数据步骤中使用此宏。
我希望这可以解决你的目的。