Making subsets using proc sql

From sasCommunity

Jump to: navigation, search

2008-Jul-08 RJF2 see also Split Data into Subsets

 
%*Split Data into subsets
  based on value of one character variable;

%Let Data = sashelp.class;
%Let Var  = sex;%*character variable;

%*task 1: make unique list of values;

PROC Sort data = &Data.
         (keep = &Var.)
          out  = Values
                 nodupkey;
          by     &Var. ;


%*task 2: make unique strings for one-to-many;

PROC SQL print;
         select &Var. as ListData
               ,cat('when ("'   , &Var.
                   ,'") output ', &Var. ,';')
                   as ListWhen
         into   :ListData separated by ' '
               ,:ListWhen separated by ' '
         from   Values;
         quit;
%Put _global_;


%*task 2: read data, make many subsets;

DATA   &ListData.;
do until(EndoFile);
   set &Data. end = EndoFile;
   select(&Var.);
      &ListWhen.
      otherwise;
      end;
   end;
stop;
run;

log:

21         %Put _global_;
GLOBAL LISTWHEN when ("F") output F; when ("M") output M;
GLOBAL LISTDATA F M

...

NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set WORK.F has 9 observations and 5 variables.
NOTE: The data set WORK.M has 10 observations and 5 variables.

proc sql output:

List 
Data  ListWhen
----  -------------------
F     when ("F") output F;                                                                  
M     when ("M") output M;
  • This page was last modified 15:46:45, 2007-04-30.
    • This page has been accessed 183 times as of 2008-Jul-08
Personal tools