计算一个月内的观察值,保持每天的行数

counts observations in a month keeping daily rows

假设我有这个数据:

data Have;
input ID callDate :ddmmyy. ;
format callDate ddmmyy10.;
datalines4;
001 30/11/2020 
002 30/11/2020 
003 30/11/2020 
004 30/11/2020
005 30/11/2020
002 01/12/2020
004 02/12/2020 
;;;;
run;

基本上我会得到另一个按天分组的 table,对吧?所以我希望在属于一个月的所有日子里,变量“monthcount”计算那个月的所有 ID。结果会是这样的:

data want;
input callDate :ddmmyy. monthcount;
format callDate ddmmyy10.;
datalines4;
30/11/2020 5 
01/12/2020 2
02/12/2020 2
;;;;
run;

如您所见,12 月两行的计数均为 2,因为 12 月的总数为 2。 我想保留日期分组,但“monthcount”会按月计算。 在 proc sql 中有没有办法做到这一点?

如果我想在一个月内计算不同的 ID,它会有什么变化,同样的事情,但不是一个月内的所有 ID,而是唯一的 ID?

我认为这符合您的要求:

select d.date,
       (select count(*)
        from t t2
        where intnx('DTMONTH', d.date, 0) = intnx('DTMONTH', t2.date) and
              intnx('DTYEAR', d.date, 0) = intnx('DTYEAR', t2.date)
       ) as month_count
from (select distinct date from t) d