【问题标题】:SAS Sum specific column that the name are stored in other column名称存储在其他列中的 SAS Sum 特定列
【发布时间】:2015-01-15 20:43:24
【问题描述】:

我有一个这样的数据集:

 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

为了简单地解释数据集,每个 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)

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

谢谢!

【问题讨论】:

    标签: sas


    【解决方案1】:

    我不知道如何在没有循环的情况下执行此操作,但是使用数组和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;
    

    【讨论】:

    • 请注意您的比较在数学上是有效的(在这种情况下看起来是这样),这是一个很好的解决方案。我在想一个更复杂的答案,但这看起来是正确的方法。
    • 这个解决方案效果很好!我只是修改 if 语句 if start le vname(var_array) ge end then sum = sum + var_array;
    • 你确定吗?除非我真的误解了什么,否则总是会导致 sum=0。
    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 2020-10-31
    • 2014-08-18
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2021-08-27
    • 2018-04-20
    相关资源
    最近更新 更多