在SAS中获取具有最大日期和最大值以及一列的数据

时间:2016-08-30 15:39:27

标签: sql oracle sas greatest-n-per-group

表A

ID    LineNum   Date
123    12       30JAN2016
123    15       30JAN2016
123    21       25JAN2016

如何获取DATE为MAX的ID,该特定日期的LineNum应为max, 在上表中,最大日期为30JAN2016,其中15为最大值,

输出应该是: 123 15 30JAN2016

4 个答案:

答案 0 :(得分:1)

我建议订购数据并选择第一行。在Oracle中,传统上写为:

select a.*
from (select a.*
      from tablea a
      order by date desc, linenum desc
     ) a
where rownum = 1;

在Oracle 12c +中,您可以更简单地将其写为:

select a.*
from tablea a
order by date desc, linenum desc
fetch first 1 row only;

答案 1 :(得分:0)

在SAS中,假设您的日期变量是数字,您可以按id,date和linenum进行proc排序,然后选择datastep中的最后一条记录。

proc sort data=in; by id date linenum; run;

data out;
 set in;
  by id;
   if last.id;
run;

这将为每IDmax日期和最大linenum

提供一行

答案 2 :(得分:0)

SAS proc sql:

proc sql;
   select * from have group by id having date=max(date) and linenum=max(linnum);
quit;

答案 3 :(得分:0)

我认为你想要的是每个ID的最大日期,这可以通过以下查询来执行:

select * 
from 
    (select ID, max(Date) maxDate
     from table
     group by ID) a join (
     select ID, Date, max(LineNum) maxLineNum
     from   table
     group by ID, Date
) b
On a.ID = b.ID AND a.maxDate = b.Date

解释:

  1. 您首先选择每个ID的最大日期(第一个子查询)。
  2. 然后,为每个ID和日期(第二个子查询)选择最大行号。
  3. 通过加入它们,您将同时获得具有最大日期和最大LineNum的行!