SAS:条件计数和范围?

问题描述 投票:0回答:1

我有一个包含三列的数据集: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

如有任何帮助或建议,我们将不胜感激。

date count conditional-statements sas range
1个回答
0
投票

试试这个

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
© www.soinside.com 2019 - 2024. All rights reserved.