Do you want a data set or a report?
Either approach could start with this modified data:
data have;
input Firm1 $ Firm2 $ Year flag ratio;
weightedratio = flag*ratio;
datalines;
AA1 BB 1995 0 0
AA1 BB 1996 0 0
AA1 BB 1997 0 0.5
AA1 BB 1998 1 0.6
AA1 BB 1999 0 0.5
AA1 CC 1995 0 0.4
AA1 CC 1996 0 0.3
AA1 CC 1997 0 0.2
AA1 CC 1998 1 0.1
AA1 CC 1999 0 0
AA2 DD 1995 0 0.9
AA2 DD 1996 1 0.5
AA2 DD 1997 0 0.4
AA2 DD 1998 1 0.6
AA2 DD 1999 0 0
AA2 EE 1995 1 0.3
AA2 EE 1996 1 0.4
AA2 EE 1997 0 0.9
AA2 EE 1998 0 0
AA2 EE 1999 0 0
;
run;
And then calculate the mean of the new variable.
Dataset:
proc summary data=have nway;
class firm1 year;
var weightedratio;
output out=work.want (drop=_freq_ _type_)
mean=
run;
Report
proc report data=have;
columns firm1 year weightedratio;
define firm1 / group;
define year / group;
define weightedratio / mean;
run;