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