In your data step you need to decide whether an observation is to be skipped, due to the fact that it overlaps with the next observation.
To do so, you can do a self-merge with offset, as here:
merge jobyr jobyr (firstobs=2 keep=jobyrin rename=(jobyrin=nxt_jobyrin));
which tells sas to read an observation, and also one variable (renamed) from the next observation (because it has "firstobs=2"). This will let you know whether the current obs overlaps with the next, by comparing JOBYROUT with NXT_JOBYRIN.
Of course, this doesn't protect against the end of one id overlapping with the start of the next. To detect that condition, you can use a SET with a BY statement:
set jobyr (keep=id);
by id;
which generates dummy variables first.id and last.id, indicating whether the current obs is at the start or end of an id. So if you are at the end of an id, you should output the current obs, even if the years overlap with the next obs.
data want (drop=first_: nxt_: job);
set jobyr (keep=id);
by id;
merge jobyr jobyr (firstobs=2 keep=jobyrin rename=(jobyrin=nxt_jobyrin));
retain first_yrin first_job .;
if first_yrin=. then first_yrin=jobyrin;
if first_job=. then first_job=job;
if last.id or nxt_jobyrin>jobyrout;
jobyrin=first_yrin;
jobs=ifc(job^=first_job,catx('_',first_job,job),cats(job));
call missing(of first_:);
run;
Then the only other task is the preserve FIRST_YRIN, which is the JOBYRIN at the start of an overlapping series. And also similarly preserve FIRST_JOB.
The subsetting if statement
if last.id or nxt_jobyrin>jobyrout;
allows only the last record of each id, or any record that does not overlap with the upcoming record.
Note that this will accommodate an overlapping series of any length - not just two overlapping records.