Depending on the size of have1 using a hash object could solve the problem:
data work.want;
set work.have2;
length flag more 8;
if _n_ = 1 then do;
if 0 then set work.have1;
declare hash h(dataset: 'work.have1', multidata: 'yes');
h.defineKey('name', 'code');
h.defineData('start', 'end');
h.defineDone();
call missing(start, end);
end;
flag = 0;
if h.find() = 0 then do;
flag = year(start) <= year <= year(end);
h.has_next(result: more);
do while (more and not flag);
rc = h.find_next();
flag = (year(start) <= year <= year(end)) or flag;
h.has_next(result: more);
end;
end;
drop start end rc more;
run;
... View more