Return 每组最近日期的观察
Return Observation With Most Recent Date in each group
我已经尝试了以下代码,不幸的是它在几个地方被抽查了,但不是全部。
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
非常经典 select 仅包含每组最新日期的行。我以前弄对了,但现在好像弄不明白了。
在此先感谢您的帮助
这是一个使用基本 SAS 代码的简单版本。
proc sort data=have;
by name descending report_date;
data want;
set have;
by name;
if first.name;
run;
使用 having
子句和 SAS SQL 自动重新合并。当存在 GROUP BY
时,将按组应用逻辑
示例:
create table want AS
SELECT *
from have
group by name
having report_date = max(report_date)
我已经尝试了以下代码,不幸的是它在几个地方被抽查了,但不是全部。
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
非常经典 select 仅包含每组最新日期的行。我以前弄对了,但现在好像弄不明白了。
在此先感谢您的帮助
这是一个使用基本 SAS 代码的简单版本。
proc sort data=have;
by name descending report_date;
data want;
set have;
by name;
if first.name;
run;
使用 having
子句和 SAS SQL 自动重新合并。当存在 GROUP BY
示例:
create table want AS
SELECT *
from have
group by name
having report_date = max(report_date)