data dsn;
input date;
format date;
datalines;
201602
201705
201806
201902
;
run;
data want;
set dsn;
date=intnx('month', input(put(date, 6.), yymmn6.), 0, 'e');
format date yymmdd10.;
run;
Assuming your data is sorted.. Also, I corrected your test data
data dsn;
input date :yymmdd10.;
format date yymmdd10.;
datalines;
2016-02-29
2017-05-31
2018-06-30
2019-02-28
;
run;
data want;
set dsn end=lr;
if lr;
run;
data dsn;
input date;
format date;
datalines;
201602
201705
201806
201902
;
run;
data want;
set dsn;
date=intnx('month', input(put(date, 6.), yymmn6.), 0, 'e');
format date yymmdd10.;
run;