查找与SAS中的最大值关联的ID

时间:2015-01-19 20:03:22

标签: sql sas

我们说我的数据如下:

ID_A    ID_B    ID_C    NUM_1
123     124     0       72
123     124     1       90
123     124     1       80

我想在我的数据中添加两列。第一个将选出NUM_1的最大值(按ID_A,ID_B,ID_C分组),第二个将选择与NUM_1的最大值对应的ID_C。

对于这些数据,答案是

ID_A    ID_B    ID_C    NUM_1   MAX_1   MAX_ID
123     124     0       72      72      0
123     124     1       90      90      1
123     124     1       80      90      1

使用类似

的内容
PROC SQL;
CREATE TABLE WORK.TEST1 AS 
SELECT t1.ID_A, 
      t1.ID_B, 
      t1.ID_C, 
      t1.NUM_1,
      /* Max_1 */
        (MAX(t1.NUM_1)) FORMAT=13.2 AS MAX_1

  FROM WORK.TEST t1
  GROUP BY t1.ID_A, 
           t1.ID_B, 
           t1.ID_C 
  HAVING MAX(t1.NUM_1)
  ORDER BY t1.ID_A, 
           t1.ID_B, 
           t1.ID_C, 
           t1.NUM_1;
QUIT;

我能够获得最大值,在所需的行中重复,但它没有得到MAX_ID,在我想要的所需行中重复。

我是SAS的新手,但我已经尝试了一段时间才能得到这个,如果其他地方有这个问题我会道歉。

顺便说一句,我正在使用SAS EG,所以如果您知道如何使用数据步骤来实现这一点,我可以接受它。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

在SAS中,您可以使用having子句,如下所示:

proc sql noprint;
  create table tallest as
  select name, height
  from sashelp.class
  having height = max(height)
  ;
quit;

答案 1 :(得分:1)

另一个SAS选项是将PROC MEANSidgroup一起使用。

proc means data=sashelp.class noprint;
var height;
output out=tallest  idgroup(max(height) out (name height)=);
run;

它将高度的最大值与您想要的任何其他值一起(在这种情况下,名称,实际上是一个id变量)。

答案 2 :(得分:0)

可以使用correlated subquery完成此操作。

以下行适用于您的示例数据。如果您的完整数据中存在特殊情况,则可能需要进行调整。它将遵循定义MAX_1的条款。

(select distinct t2.ID_C from test as t2 where t1.NUM_1 = t2.NUM_1) as MAX_ID