根据重叠日期创建数据集
Creating datasets based on overlapping dates
我有一个包含 window 开始和结束日期的数据集。对于一个帐户,可能有多个案例,每个案例都有单独的 window 开始日期和结束日期。我想创建两个数据集,一个案例有重叠 window 开始和结束日期,另一个没有重叠案例。
我拥有的数据集
input acct_num case window_start window_end ;
DATALINES;
55203610 1 10JAN2020 23FEB2020
55203610 2 17JAN2020 13MAR2020
55203610 3 31DEC2019 17MAR2020
55203612 1 22FEB2021 09JUN2021
55203612 2 27AUG2021 31DEC2021
55203614 1 11FEB2018 21MAR2018
55203614 2 14MAR2018 23JUL2018
;
run;
我想要的数据集。
overlapping dataset
55203610 1 10JAN2020 23FEB2020
55203610 2 17JAN2020 13MAR2020
55203610 3 31DEC2019 17MAR2020
55203614 1 11FEB2018 21MAR2018
55203614 2 14MAR2018 23JUL2018
Non overlapping dataset
55203612 1 22FEB2021 09JUN2021
55203612 2 27AUG2021 31DEC2021
所以,如果您看到重叠数据集包含日期重叠的案例帐户。
任何帮助将不胜感激。
根据您的数据集,这是可行的。
- 识别初始数据集中的重叠并创建一个标志
- 根据任何具有重叠标志的 ID 过滤数据集
- 根据具有重叠标志的任何 ID 的倒数过滤数据集
data have;
infile cards;
input acct_num case window_start : date9. window_end : date9.;
format window_: date9.;
cards;
55203610 1 10JAN2020 23FEB2020
55203610 2 17JAN2020 13MAR2020
55203610 3 31DEC2019 17MAR2020
55203612 1 22FEB2021 09JUN2021
55203612 2 27AUG2021 31DEC2021
55203614 1 11FEB2018 21MAR2018
55203614 2 14MAR2018 23JUL2018
;
run;
data check;
set have;
by acct_num;
prev_start=lag(window_start);
prev_end=lag(window_end);
if not first.acct_num and prev_start<window_start<prev_end then
overlap=1;
run;
proc sql;
create table want_overlap as select * from have where acct_num in (select
distinct acct_num from check where overlap=1);
quit;
proc sql;
create table want_no_overlap as select * from have where acct_num not
in (select distinct acct_num from check where overlap=1);
quit;
我有一个包含 window 开始和结束日期的数据集。对于一个帐户,可能有多个案例,每个案例都有单独的 window 开始日期和结束日期。我想创建两个数据集,一个案例有重叠 window 开始和结束日期,另一个没有重叠案例。
我拥有的数据集
input acct_num case window_start window_end ;
DATALINES;
55203610 1 10JAN2020 23FEB2020
55203610 2 17JAN2020 13MAR2020
55203610 3 31DEC2019 17MAR2020
55203612 1 22FEB2021 09JUN2021
55203612 2 27AUG2021 31DEC2021
55203614 1 11FEB2018 21MAR2018
55203614 2 14MAR2018 23JUL2018
;
run;
我想要的数据集。
overlapping dataset
55203610 1 10JAN2020 23FEB2020
55203610 2 17JAN2020 13MAR2020
55203610 3 31DEC2019 17MAR2020
55203614 1 11FEB2018 21MAR2018
55203614 2 14MAR2018 23JUL2018
Non overlapping dataset
55203612 1 22FEB2021 09JUN2021
55203612 2 27AUG2021 31DEC2021
所以,如果您看到重叠数据集包含日期重叠的案例帐户。
任何帮助将不胜感激。
根据您的数据集,这是可行的。
- 识别初始数据集中的重叠并创建一个标志
- 根据任何具有重叠标志的 ID 过滤数据集
- 根据具有重叠标志的任何 ID 的倒数过滤数据集
data have;
infile cards;
input acct_num case window_start : date9. window_end : date9.;
format window_: date9.;
cards;
55203610 1 10JAN2020 23FEB2020
55203610 2 17JAN2020 13MAR2020
55203610 3 31DEC2019 17MAR2020
55203612 1 22FEB2021 09JUN2021
55203612 2 27AUG2021 31DEC2021
55203614 1 11FEB2018 21MAR2018
55203614 2 14MAR2018 23JUL2018
;
run;
data check;
set have;
by acct_num;
prev_start=lag(window_start);
prev_end=lag(window_end);
if not first.acct_num and prev_start<window_start<prev_end then
overlap=1;
run;
proc sql;
create table want_overlap as select * from have where acct_num in (select
distinct acct_num from check where overlap=1);
quit;
proc sql;
create table want_no_overlap as select * from have where acct_num not
in (select distinct acct_num from check where overlap=1);
quit;