If you are going to use Linlin's originally suggested method, you could get the number of observations in the same pass of the file if you replace the datastep with proc sql code. E.g.:
%macro test;
%do year=1989 %to 2010;
%do month=1 %to 12;
%let month=%sysfunc(putn(&month,z2.));
proc sql;
create table test&year.&month. as
select *, count(*) as nobs
from test
where year(date)=&year and
month(date)=&month
;
quit;
%end;
%end;
%mend;
%test