#sas #proc-sql
#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
Довольно классический выбор только строки с самой последней датой для каждой группы. Я понял это правильно раньше, но, похоже, не могу понять это сейчас.
Заранее спасибо за любую помощь
Ответ №1:
Вот простая версия, использующая базовый код SAS.
proc sort data=have;
by name descending report_date;
data want;
set have;
by name;
if first.name;
run;
Комментарии:
1. вау, я не знаю, почему я так зациклился на желании использовать proc SQL и функцию max(). Я пытался избежать перемещения, когда люди присоединяют таблицу к самой себе. Теперь я немного смущен.
Ответ №2:
Используйте having
предложение и автоматическое повторное объединение SAS SQL. наличие логики будет применяться по группе, когда есть GROUP BY
Пример:
create table want AS
SELECT *
from have
group by name
having report_date = max(report_date)