As always, prefaced by, "If I understand correctly" ...
The simplest way would be to create your own shell of a data set with all the categories:
proc sql;
create table categories as select distinct staff_cat from have;
run;
data shell;
retain count 0;
set categories;
do service=1 to 10;
output;
end;
run;
Then you can merge in the employee data:
data want;
merge shell have;
by staff_cat;
run;
The order of the data sets in the MERGE statement is important, so nonzero values for COUNT replace zero values in the shell.
... View more