If you had a combination of variables that uniquely identified the row then you could use PROC TRANSPOSE.
Use those variables in your BY statement for PROC TRANSPOSE.
proc transpose data=have out=step2 ;
by type group ;
var new_: exist_: ;
run;
Then you can parse the _NAME_ field to get the two pieces of information out of that metadata and into actual data.
data want;
set step2;
length month 8 tag $8 ;
tag=scan(_name_,1,'_');
month = input(scan(_name_,2,'_'),yymmn6.);
format month yymm7.;
rename col1=amount;
run;
If you don't have unique BY groups then you could just add a step to create a new variable to uniquely id each row.
data step1;
row + 1;
set have;
run;
Then use that in your BY statement for PROC TRANSPOSE.
proc transpose data=step1 out=step2 ;
by row type group ;
var new_: exist_: ;
run;