我有一个包含三列的数据集:ID、操作日期 A、操作日期 B。
身份证 |行动日期A |行动日期B
123 | 2020 年 7 月 1 日 | 2020 年 7 月 15 日
123 | 2021 年 7 月 1 日 | 2021 年 8 月 19 日
123 | 2022 年 7 月 1 日 | 2022 年 11 月 3 日
123 | 2023 年 7 月 1 日 | 2023 年 7 月 14 日
123 | 2023 年 7 月 1 日 | 2023 年 11 月 14 日
123 | 2024 年 7 月 1 日 | 2024 年 11 月 15 日
456 | 2020 年 3 月 3 日 | 2020 年 3 月 4 日
456 | 2023 年 3 月 3 日 | 2023 年 4 月 5 日
456 | 2024 年 3 月 3 日 | 2024 年 5 月 3 日
我喜欢输出为 3 列:ID、操作 A 日期和想要。 想要一栏是:行动日期 B 的计数,条件是行动日期在 A 的 2 年内。
我想要以下输出:
身份证 |行动日期A |想要
123 | 2020 年 7 月 1 日 | 0
123 | 2021 年 7 月 1 日 | 1
123 | 2022 年 7 月 1 日 | 2
123 | 2023 年 7 月 1 日 | 2
123 | 2024 年 7 月 1 日 | 3
456 | 2020 年 3 月 3 日 | 0
456 | 2023 年 3 月 3 日 | 0
456 | 2024 年 3 月 3 日 | 1
如有任何帮助或建议,我们将不胜感激。
试试这个
data have;
input ID (DateofActionA DateofActionB)(:yymmdd10.);
format DateofActionA DateofActionB yymmdd10.;
datalines;
123 2020-07-01 2020-07-15
123 2021-07-01 2021-08-19
123 2022-07-01 2022-11-03
123 2023-07-01 2023-07-14
123 2023-07-01 2023-11-14
123 2024-07-01 2024-11-15
456 2020-03-03 2020-03-04
456 2023-03-03 2023-04-05
456 2024-03-03 2024-05-03
;
proc sql;
create table want as
select ID
, DateofActionA
, (select count(*)
from have as b
where a.ID = b.ID
and b.DateofActionB between intnx('year', a.DateofActionA, -2, 's')
and a.DateofActionA) as count
from have as a
;
quit;
结果:
ID DateofActionA count
123 2020-07-01 0
123 2021-07-01 1
123 2022-07-01 2
123 2023-07-01 2
123 2023-07-01 2
123 2024-07-01 3
456 2020-03-03 0
456 2023-03-03 0
456 2024-03-03 1