data b;
input group_all;
cards;
1
2
3
4
5
6
;
run;
data b;
set b;
code=compress('group'||ceil(group_all/3));
run;
proc sort data = Work.B nodupkey out = _PROJ_.SPLITED0 (keep=CODE);
   by CODE;
run;
/***Assign values to macro variables***/
data _null_;
  set _PROJ_.SPLITED0 end=eof;
  newvar = compress(CODE);
  call symput('col'||left(_n_),left(trim(newvar)));
  call symput('value'||left(_n_),left(trim(CODE)));
  if eof then call symput('num',_n_);
run;
/***Subset the data set by Split-by column***/
%macro subdata;
  %*                                 ;
  %****Macro to subset a data set****;
  %*                                 ;
  %do k=1 %to #
    data temp&k (rename = (GROUP_ALL = &&col&k.&&k));
      set Work.B;
      if CODE = "&&value&k";
      drop CODE;
    run;
  %end;
%mend;
/***Create a list of all temporary data sets***/
%macro filelist;
  %*                                        ;
  %****Macro for listing temporary files****;
  %*                                        ;
  %do n=1 %to #
    temp&n
  %end;
%mend;
%subdata
/***Merge all temporary data sets***/
data c;
   merge %filelist;
run;
/***Delete temporary data sets in WORK library***/
proc datasets nolist;
   delete %filelist;
run;
quit;
quit;