Hello,
if you like data steps you can use a proc sql-data step solution:
[pre]
*consecutive years;
proc sql noprint;
select cats('yr',min(year)), cats('yr',max(year)),min(year),max(year) into :yr_min, :yr_max, :lb, :hb separated by ' ' from names;
quit;
data want;
do until(last.id);
set names;
by id;
array yr{&lb:&hb} $ 12 &yr_min-&yr_max;
yr{year}=name;
end;
drop year name;
run;
*Universal;
proc sql noprint;
select cats('yr', years) into :all_y separated by ' ' from (select distinct(year) as years from names)
order by years ;
quit;
data want1;
do until(last.id);
set names;
by id;
z=countw(substr("&all_y",1,findw("&all_y",cats('yr',year))+5));
array yr{*} $ 12 &all_y;
yr{z}=name;
end;
drop year name z;
run;
[/pre]
Marius
... View more