问题描述
这是给定的数据集
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;