Split SAS dataset

后端 未结 2 1355
挽巷
挽巷 2021-01-17 02:00

I have a SAS dataset that looks like this:

id | dept | ...
1    A
2    A
3    A
4    A
5    A
6    A
7    A
8    A
9    B
10   B
11   B
12   B
13   B
         


        
2条回答
  •  情书的邮戳
    2021-01-17 02:42

    You could try this:

    %macro split(inds=,maxobs=);
    
      proc sql noprint;
        select distinct dept into :dept1-:dept9999
        from &inds.
        order by dept;
        select ceil(count(*)/&maxobs.) into :numds1-:numds9999
        from &inds.
        group by dept
        order by dept;
      quit;
      %let numdept=&sqlobs;
    
      data %do i=1 %to &numdept.;
             %do j=1 %to &&numds&i;
               dept&&dept&i&&j.
             %end;
           %end;;
        set &inds.;
        by dept;
        if first.dept then counter=0;
        counter+1;
        %do i=1 %to &numdept.;
          %if &i.=1 %then %do;
            if
          %end;
          %else %do;
            else if
          %end;
                    dept="&&dept&i" then do;
          %do k=1 %to &&numds&i.;
            %if &k.=1 %then %do;
              if
            %end;
            %else %do;
              else if
            %end;
                     counter<=&maxobs.*&k. then output dept&&dept&i&&k.;
          %end;
          end;
        %end;
      run;
    %mend split;
    
    %split(inds=YOUR_DATASET,maxobs=3);
    

    Just replace the INDS parameter value in the %SPLIT macro call to the name of your input data set.

提交回复
热议问题