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]