perhaps you can use this as an foundation for your further work (please post your solution)
[pre]
data input;
input Choice $ value;
datalines;
A 1
B 2
C 2
D 3
E 3
F 4
; run;
%macro sqlloop(input,byvar,keep,output);
proc sql NOPRINT;
select distinct &byvar. into :_values SEPARATED by " &output."
from &input.;
quit;
data &output.&_values.;
set &input.;
keep &keep.;
select (&byvar);
%do i=1 %to %sysfunc(count(&output.&_values.,&output.));
%let var = %sysfunc(scan(&output.&_values.,&i.));
when ("%substr(&var.,%length(&output.)+1)")
output &var.;
%end;
end;
run;
%mend;
%sqlloop(input=input, byvar=Choice, keep=value, output=TableOut);
[/pre]