Sas 是否有一种方法可以扫描多列以获取特定值并输出列名?

Sas 是否有一种方法可以扫描多列以获取特定值并输出列名?,sas,Sas,我有一个大约有30列的表。列可以有X、N、C、D的值。是否有一种方法不需要编写单独的case语句来扫描所有列以查找特定的值(在本例中为C),如果某列的行中确实有该值,则将列名输出到新列?例如: COL1 | COL2 | COL3….| COL30 | NEW|u COL “X”|“C”|“N”|“D”|“COL2” 其中此行中的Column2具有我正在搜索的值'C',因此'New_column'的值为'COL2' 希望这是有道理的。谢谢你的时间 这会给你一个想法。WhichC返回与参数2,3匹

我有一个大约有30列的表。列可以有X、N、C、D的值。是否有一种方法不需要编写单独的case语句来扫描所有列以查找特定的值(在本例中为C),如果某列的行中确实有该值,则将列名输出到新列?例如:

COL1 | COL2 | COL3….| COL30 | NEW|u COL
“X”|“C”|“N”|“D”|“COL2”

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


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

这会给你一个想法。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

这应该给你一个想法。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

伟大的非常感谢你!伟大的非常感谢你!