如果我有1和0的数据,我怎样才能返回每行中第一个非零值的变量(Hlookup-in excel)。以下是所需数据和输出的示例。任何帮助,将不胜感激。感谢。
a b c d output
p 1 0 0 0 a
q 0 0 1 1 c
r 0 1 0 0 b
s 0 0 0 1 d
答案 0 :(得分:2)
将VNAME和WHICHN功能与Array一起使用。 有多种方法可以简化变量列表,请参阅此处的文档http://support.sas.com/documentation/cdl/en/lrcon/68089/HTML/default/viewer.htm#p0wphcpsfgx6o7n1sjtqzizp1n39.htm
Array list_vars(*) a b c d e;
X = whichn(1, of list_vars(*);
Variable_Name = vname(list_vars(x));
编辑: 如果一行全为零,则x = 0,变量保持空白。
Variable_Name = ifn(x=0, ' ', vname(list_vars(x));
答案 1 :(得分:0)
一种暴力方法使用case
:
proc sql;
select (case when q <> 0 then 'q'
when r <> 0 then 'r'
when s <> 0 then 's'
when t <> 0 then 't'
end) as FirstNonzero
from t;
答案 2 :(得分:0)
a b c d output
p 1 0 0 0 a q 0 0 1 1 c,d r 0 1 0 0 b s 0 0 0 1 d
答案:
array list(*) a b c;
array var(3) $ x1-x3;
do i=1 to dim(list);
if list{i}>0 then var(i)=vname(list{i});
end;
output=catx(", ",of var(*));