Here's a solution. Doesn't look very pretty but seems to do the job. data have; infile cards missover; input cod dt_in :yymmn6. dt_out :yymmn6. flg_out; cards; 1 201402 201406 1 1 201407 201409 1 2 201501 201503 1 2 201504 . 0 3 201503 201503 1 ; run; data want ; set have; do i= 0 to 99 ; if i=0 then do; earlier_dt = .; saved_dt_out = dt_out; end; else earlier_dt = intnx('month',dt_in, i-1, 'b'); if saved_dt_out = intnx('month',dt_in, i, 'b') then do; dt_out = saved_dt_out; flg_out = 1; output; leave; end; else do; dt_out = .; flg_out = 0; output; if saved_dt_out = . and intnx('month',dt_in, i, 'b') > today() then leave; end; end; format dt_in dt_out earlier_dt yymmn6.; drop i saved_dt_out; run;
... View more