有没有办法扫描特定值的多个列并输出列名?

时间:2016-10-13 16:11:27

标签: sas

我有一张约30列的表格。列可以具有X,N,C,D的值。有没有办法编写单个case语句来扫描特定值的所有列,在本例中为C,如果列中确实有一行值,那么将列名输出到新列?例如:

COL1 | COL2 | COL3 .... | COL30 | NEW_COL

'X'| 'C'| 'N'| 'D'| 'COL2'

此行中的Column2具有我正在搜索的值'C',因此'New_column'的值为'COL2'。

希望这是有道理的。谢谢你所有的时间!

1 个答案:

答案 0 :(得分:4)

这应该会给你一个想法。 WhichC返回与参数2,3,...匹配的第一个参数的索引.VNAME返回变量的名称。

25         data _null_;
26            array col[4] $1 ('X' 'C' 'N' 'D');
27            l = whichc('C',of col[*]);
28            length cColName $32;
29            if l then cColname = vname(col[l]);
30            put _all_;
31            run;

col1=X col2=C col3=N col4=D l=2 cColName=col2 _ERROR_=0 _N_=1