【问题标题】:How to find Second largest number in a Column using PROC MEANS in SAS?如何在 SAS 中使用 PROC MEANS 查找列中的第二大数字?
【发布时间】:2016-01-18 13:04:01
【问题描述】:

我从事 SAS 工作已有一段时间了。我创建了一个虚拟数据集,如下所示:

data try1;
infile datalines;
length Level $ 10;
input Variable $ Level $ Exposure;
datalines;
A A1 100
A A2 200
A A3 300
A Unknown 1000
B B1 70
B B2 20
B B3 30
B B4 40
B Unknown 100
C C1 200
C C2 100
C C3 80
C Unknown 50
;
Run;

现在成功完成创建数据集后,我试图找出每个“变量”类中的最大数字,这已通过 PROC MEANS 程序完成。相同的代码如下:

proc means data=try1 noprint;
Class Variable;
id Level;
var Exposure;
output out = try2 (drop = Level _TYPE_ _FREQ_)
maxid(Exposure(Level)) = max_factor 
max=;
run;

我能够得到正确的输出。但现在我想知道每一类“变量”中的第二大数字,当然我需要这样的输出:

Max_Exposure    Sec_Max_Exposure    Output
  Unknown            A3               A3
  Unknown            B1               B1
     C1              C2               C1

基本上我需要消除未知的“级别”,以便获得所需的输出列。

谁能帮我解决使用 PROC MEANS 语句的问题。

问候

【问题讨论】:

  • 我也打算在 R 上做同样的事情。

标签: sas


【解决方案1】:

我认为这是您想要的,但它与您显示的 OUTPUT NEEDED 不匹配。你的神秘剥削无济于事。

这对绑定的 EXPOSURE 值没有任何特殊处理。

data try1;
infile datalines;
length Level $ 10;
input Variable $ Level $ Exposure;
datalines;
A A1 100
A A2 200
A A3 300
A Unknown 1000
B B1 70
B B2 20
B B3 30
B B4 40
B Unknown 100
C C1 200
C C2 100
C C3 80
C Unknown 50
;
Run;
proc print;
   run;
proc summary data=try1 nway;
   where level ne: 'Unk';
   class variable;
   output out=max2(drop=_type_)
      idgroup(max(exposure) out[2](exposure level)=);
   run;
proc print;
   run;

【讨论】:

    【解决方案2】:

    您可以在单个数据步中完成...

    数据要; 设置有; 通过变量; 长度 maxid1 maxid2 $10。 保留 max1 max2 。 maxid1 maxid2 '' ; 如果 first.Variable 然后调用 missing(of max:) ; 如果曝光 > max1 则执行; 最大 2 = 最大 1 ; maxid2 = maxid1 ; max1 = 曝光; maxid1 = 级别; 结尾 ; 如果 last.Variable 则输出; 跑 ;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2013-11-10
      • 1970-01-01
      • 2023-03-02
      • 2011-02-06
      • 2023-03-09
      相关资源
      最近更新 更多