SAS Sum特定列,名称存储在其他列中

use*_*455 2 sas

我有这样的数据集:

 ID    I201401    I201402    ... I201411    I201412    START     END
 1       1           0              1          1      I201402  I201410
 2       0           0              0          1      I201401  I201408
 3       1           1              0          0      I201408  I201412
Run Code Online (Sandbox Code Playgroud)

为了解释数据集,根据某个因素,每个ID在I201401到I201412列中都有1或0.根据其他因素,我也建立列START和END.并非所有ID都具有相同的START和END值.

我想要做的是创建一个其他列,它是START列到END列中列提及的总和.为了快速理解,这里应该出现数据集:

 ID               SUM
 1  (SUM of I201402 Throught I201410)
 2  (SUM of I201401 Throught I201408)
 3  (SUM of I201408 Throught I201412)
Run Code Online (Sandbox Code Playgroud)

事情是一个不知道如何指定sum函数使用列START和END的值来做的操作.

谢谢!

Jef*_*eff 5

我不知道如何在没有循环的情况下这样做,但是使用数组和vname()函数,你应该能够做你需要的:

data want (keep=id sum);
    set have;
    array var_array I201401--I201412;
    sum=0;
    do over var_array;
        if start le vname(var_array) le end then sum = sum + var_array;
    end;
run;
Run Code Online (Sandbox Code Playgroud)