计算一个月内的观察值,保持每天的行数
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
假设我有这个数据:
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