First thing is do you really need that new data set? As in, how do you intend to use the result?
 
Often changing from "long" to "wide" is not a good choice for most analysis or reporting in SAS.
 
This works for your example data:
Proc transpose data=have out=trans (drop=_name_)
   prefix=Col_b_;
   by col_a;
   var col_b;
run;
proc summary data=have nway;
   by col_a;
   var col_c;
   output out=summary(drop=_:) min=;
run;
data want;
   merge trans summary ;
   by col_a;
run;
However there might be some issues around desired results if any of the Col_b are duplicated within the value of col_a of if the order of the Col_b values in the output needs to be in a specific order different than order of appearance in the Have dataset.
 
The Proc summary has a drop dataset option because there would be other variables included in the output set