Считать разных людей в год, но только один раз - PullRequest
0 голосов
/ 14 апреля 2020

Как бы я выбирал отдельных людей в год, но подсчитывал каждого человека только один раз.

Пример моих данных:

ID Date
1 20NOV2018    
2 06JUN2017    
2 29JUL2011    
3 05MAY2014    
4 04APR2002    
4 25APR2009

Я хочу, чтобы мои результаты выглядели так:

2002 1    
2009 0    
2011 1    
2014 1    
2017 0     
2018 1

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Надеюсь, что этот код отлично подойдет для вашего случая:

ВЫБЕРИТЕ ГОД (M.DATE) КАК ДАТА, СЧЕТ (S.ID) ОТ @TAB M СЛЕДУЮЩЕГО СОЕДИНЕНИЯ (ВЫБЕРИТЕ МИН. (ГОД (ДАТА)) КАК DATE, ID ИЗ @TAB GROUP BY ID) S В ГОД (M.DATE) = S.DATE GROUP В ГОД (M.DATE) ПОРЯДОК ГОДА (M.DATE)

0 голосов
/ 15 апреля 2020

Используйте субвыборы, чтобы объединить отдельные годы с первым годом, когда произошел идентификатор, и сосчитать идентификаторы из этого.

data have;
input 
id date date9.; format date date9.; datalines;
1 20NOV2018
2 06JUN2017
2 29JUL2011
3 05MAY2014
4 04APR2002
4 25APR2009
run;

proc sql;
  create table want as 
  select each.year, count(first.id) as appeared_count
  from
    ( select distinct year(date) as year 
      from have
    ) as each
  left join
    ( select id, min(year(date)) as year
      from have group by id 
    ) as first
  on each.year = first.year
  group by each.year
  order by each.year
  ;
...