当值为1时在sas中获取一列列名

问题描述

这是给定的数据集

Ins_id   Prod1 Prod2 Prod3 Prod4

1234     1     0     1     0
5678     0     0     1     0
91011    0     1     0     1
12131    1     1     0     1

我想创建一个新列,当相应的值为1时显示所有列名。因此,例如对于ins_id = 1234,字符串将为'Prod1,Prod3'。至少有40个变量。

Expected Output:
    Ins_id   Prod1 Prod2 Prod3 Prod4 Prod_Yes

    1234     1     0     1     0     Prod1,Prod3
    5678     0     0     1     0     Prod3
    91011    0     1     0     1     Prod2,Prod4
    12131    1     1     0     1     Prod1,Prod2,Prod4

有人可以帮忙吗?赞赏!

解决方法

一些基本的阵列功能可以在这里为您提供帮助。如果值为1,则使用VNAME()从数组中获取变量名称,然后使用CATX()将数据组合在一起。

未测试:

data want;
set have;
length prod_yes $100.;

array prod(*) prod1-prod4;

do i=1 to dim(prod);
     if prod(i) = 1 then prod_yes = catx(",",prod_yes,vname(prod(i)));
end;

run;