查找SAS中的第一个非零值

时间:2016-10-07 02:28:54

标签: sql sas

如果我有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

3 个答案:

答案 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(*));