This might be one way to solve it 🙂
data one;
length id 8 first_term $6 program$32;
input id first_term program;
datalines;
610 199601 Libarts
610 201001 Medtran
610 201102 Photo
;
run;
data two;
length Id 8 Term $6 CRN $32;
input id term crn;
datalines;
610 199602 211
610 199702 213
610 200501 102
610 200903 302
610 200903 321
610 201001 124
610 201001 153
610 201001 150
610 201001 142
610 201002 225
610 201002 242
610 201002 244
610 201003 316
610 201101 103
610 201101 121
610 201101 142
610 201101 145
610 201102 242
610 201102 242
610 201103 315
610 201201 140
610 201201 140
610 201201 150
610 201202 211
610 201202 241
610 201202 242
;
run;
proc sort data=one;
by id descending first_term;
run;
data one;
set one;
length fromdate todate $6;
fromdate = first_term;
todate = lag(first_term);
if todate = '' then todate = '599901';
run;
proc sql;
create table tog as
select two.id, two.term, two.crn, one.program from one
inner join two
on one.id = two.id
and one.fromdate <= two.term < one.todate
;
run;
... View more