每组返回最近日期的观察值

时间:2020-09-16 20:03:01

标签: sas proc-sql

我尝试了以下代码,但不幸的是,它在少数几个地方进行了检查,但并非全部。

proc sql;
create table AgedPrep AS
SELECT * , MAX(report_date) AS Latest_dt format date9.
FROM WORK.What_We_Have 
GROUP BY Name 
;
quit;


proc sql;
create table Aged_Want AS
SELECT * 
FROM WORK.AgedPrep
Where Latest_dt = report_date
;
quit;

我们有以下数据

  Name  Report_Date  Outcome
  Brian  11/12/13    good
  Brian  11/14/14    bad
  sussie  9/12/20    good
  sussie  12/11/19   bad

我们想要以下

  Name  Report_Date  Outcome
  Brian  11/14/14    bad
  sussie  9/12/20    good

非常经典,每个组仅选择日期最近的行。我以前已经正确了,但现在似乎无法理解。

在此先感谢您的帮助

2 个答案:

答案 0 :(得分:0)

这是使用基本SAS代码的简单版本。

proc sort data=have;
   by name descending report_date;

data want;
   set have;
   by name;
   if first.name;
run;


答案 1 :(得分:0)

使用having子句和SAS SQL自动重新合并。当存在GROUP BY

时,具有逻辑的将按组应用

示例:

  create table want AS
  SELECT *
  from have
  group by name
  having report_date = max(report_date)