Add a year variable in dataset data1, data2 and condition in where clause. As Shown in the follows.
I used informat and format for date variable, so the date looks slightly different.
data data1;
informat date yymmdd8.;
input stock $ date abnormalreturn;
year1 = year(date);
datalines;
A 20040311 0.11
A 20040312 0.1
A 20040313 0.2
A 20040314 0.1
;run;
proc print data=data1;
format date date.;
run;
data data2;
informat dateann yymmdd8.;
input stock $ dateann dif;
year2 = year(dateann);
datalines;
A 20040311 0.1
A 20050317 0.2
A 20060314 0.3
;run;
proc print data=data2;
format dateann date.;
run;
proc sql;
select a.stock, date format=yymmdd8., dateann format=yymmdd8.,
abnormalreturn, dif
from data1 a, data2 b
where a.stock=b.stock and a.year1=b.year2
order by a.stock, dateann, date;
quit;
output
stock date dateann abnormalreturn dif
A 04-03-11 04-03-11 0.11 0.1
A 04-03-12 04-03-11 0.1 0.1
A 04-03-13 04-03-11 0.2 0.1
A 04-03-14 04-03-11 0.1 0.1