OK, then it would require arrays. Here's a good way: data want; set have; array start {16}; array end {16}; left_in_2009='N'; do _n_=1 to 16; if year(end{_n_}) = 2009 then do; last_left = max(last_left, end{_n_}); left_in_2009='Y'; found_at = _n_; end; end; if left_in_2009='Y' then do _n_=1 to 16; if (last_left <= start{_n_} < '01jan2010'd) and (found_at ne _n_) then left_in_2009='N'; end; run; There's a little bit of processing that might be extra careful, taking into consideration whether a person started and ended on the same date. When you're confident that the code is working properly, you might want to drop last_left and found_at.
... View more