Does below return what you're after?
data have;
infile datalines truncover dsd;
input Acct_Num :$10. Statement_Code :$1. (Eff_From_Dt Eff_To_Dt) (:ddmmyy10.);
format Eff_From_Dt Eff_To_Dt ddmmyy10.;
datalines;
123456,,30/06/2016,27/02/2017
123456,,28/02/2017,4/12/2017
123456,,5/12/2017,8/02/2018
123456,,9/02/2018,26/06/2018
123456,T,27/06/2018,9/07/2018
123456,T,10/07/2018,13/07/2018
123456,T,14/07/2018,26/11/2018
123456,T,27/11/2018,30/12/2018
123456,T,31/12/2018,22/01/2019
123456,,23/01/2019,28/03/2019
123456,,29/03/2019,30/05/2019
123456,,31/05/2019,3/06/2019
123456,,4/06/2019,27/08/2019
123456,,28/08/2019,23/10/2019
123456,,24/10/2019,30/10/2019
123456,T,31/10/2019,10/04/2021
123456,T,11/04/2021,30/08/2021
123456,T,31/08/2021,31/12/9999
;
proc sort data=have;
by Acct_Num Eff_From_Dt;
run;
data want(drop=_:);
set have;
by Acct_Num Statement_Code notsorted;
retain _Eff_From_Dt;
if first.Statement_Code then
_Eff_From_Dt=Eff_From_Dt;
if last.Statement_Code then
do;
Eff_From_Dt=_Eff_From_Dt;
output;
end;
run;
... View more