当值为1时,获取sas中的列名字符串

当值为1时,获取sas中的列名字符串,sas,proc-sql,datastep,Sas,Proc Sql,Datastep,这是给定的数据集 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

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;