Hi SAS Users,
I am trying to rollup the records by member_id util there is a change in 2 fields. I have given 2 scenario examples in the raw and what i tried in my code to get the expected.
Raw data - ( A change in 2 fields ( PLAN & TYPE) , should generate the new line with its begin and end date)
member_id date plan type
123 01JAN2017 A 1
123 01FEB2017 A 1
123 01MAR2017 A 2
234 01JAN2017 A 1
234 01FEB2017 B 3
234 01DEC2017 B 3
234 01JAN2018 B 2
Expected rollup -
member_id start_date end_date plan type
123 01JAN2017 30FEB2017 A 1
123 01MAR2017 31MAR2017 A 2
234 01JAN2017 31JAN2017 A 1
234 01FEB2017 31DEC2017 B 3
234 01JAN2018 31JAN2018 B 2
proc sort data=test; by member_id date ; run;
data test;
length PLAN_TYPE $10.;
set test;
format start_date end_date date9. ;
plan_type = trim(plan) || trim(type);
by member_id;
retain plan_type plan_type _tmp;
if first.member_idthen
do;
plan_type_tmp= plan_type ;
begin_date = date;
end_date = intnx('month',fisc_dt,1)-1;
end_date1 =end_Date+1;
end;
else if date= end_date1 then
do;
if trim(plan_type_tmp) ne trim(plan_type ) then do; start_date = date;
plan_type_tmp= trim(plan_type );
end;
else
end_date = date;
end;
if last.member_id then output;
run;
Please:
1. Paste your code using the appropriate icon
2. Provide data as code (data step or sql)
This does what you want and comes after your proc sort:
data WANT;
set HAVE;
by ID PLAN TYPE notsorted;
format START_DATE END_DATE date9.;
retain _DATE;
if first.TYPE then _DATE=DATE;
if last.TYPE then do;
START_DATE=_DATE;
END_DATE=intnx('month',DATE,0,'e');
output;
end;
run;
Note that 30FEB2017 does not exist. Do test the data and code you provide.
Please:
1. Paste your code using the appropriate icon
2. Provide data as code (data step or sql)
This does what you want and comes after your proc sort:
data WANT;
set HAVE;
by ID PLAN TYPE notsorted;
format START_DATE END_DATE date9.;
retain _DATE;
if first.TYPE then _DATE=DATE;
if last.TYPE then do;
START_DATE=_DATE;
END_DATE=intnx('month',DATE,0,'e');
output;
end;
run;
Note that 30FEB2017 does not exist. Do test the data and code you provide.
Glad it did. Please heed the points raised next time you post.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.