如何选择具有最高价值的列

时间:2019-06-17 18:01:06

标签: sql sas

我有一张婚姻状况(列)可能性不同的表,我该如何挑选一个价值最高的表并保留列名?

例如,以下是我的原始数据集:

data test;
infile datalines missover;
INPUT ID Gender $ pct_married pct_common_law pct_single; 
datalines;
1 male 0.5 0.3 0.2
2 female 0.6 0.4
3 male 0.3 0.3 0.4
;

我想看的是

data test2;
infile datalines missover;
INPUT ID Status $ pct_married pct_common_law pct_single; 
datalines;
1 pct_married
2 pct_married
3 pct_single
;

2 个答案:

答案 0 :(得分:2)

对要搜索的变量进行数组。使用MAX()函数查找最大值。然后使用WHICHN()函数在该值首次出现的数组中找到索引。然后使用VNAME()函数将数组引用转换为变量的名称。

data want ;
  set test;
  array pct pct_: ;
  name = vname(pct[whichn(max(of pct[*]),of pct[*])]);
run;

答案 1 :(得分:0)

您可以使用proc sqlcase表达式:

proc sql;
    select (case when pct_married >= greatest(pct_common_law, pct_single)
                 then 'pct_married'
                 when pct_common_law >= pct_single
                 then 'pct_common_law'
                 else 'pct_single'
            end) as which_is_biggest
    from missover;