proc sql noprint;
select max(count(col1,"!"))+1 into :count_max from bbb;
quit;
data ccc;
set bbb;
array value $ value1-%sysfunc(compress(value&count_max.));
do i=1 to &count_max.;
value(i)=scan(col1,i,"!");
if value(i)=lag1(value(i)) and ^missing(value(i)) then
value(i)="#";
end;
drop i col1;
run;
proc transpose data=ccc out=ddd(drop=_name_);
var value1-%sysfunc(compress(value&count_max.));
id _name_;
run;