Friday, May 27, 2011

从一个数据集生成多个数据集


生成数据集
data COUNTYDT;
  input COUNTYNM $ num;
datalines;
WASHINGTON 1
WASHINGTON 2
WASHINGTON 3
ASHLAND 4
ASHLAND 5
ASHLAND 6
BAYFIELD 7
BAYFIELD 8
;
Run;

Proc sort data= COUNTYDT;
BY COUNTYNM;  
Run;

DATA _NULL_;
SET COUNTYDT END=EOF;          
 BY COUNTYNM;                    
 IF FIRST.COUNTYNM THEN DO;    
    NUMCTY+1;                  
    CTYOBS=0;                  
    END;
 CTYOBS+1;                     
IF LAST.COUNTYNM THEN DO;      
    CALL SYMPUT('MCTY'||LEFT(PUT(NUMCTY,3.)),COUNTYNM);
    CALL SYMPUT('MOBS'||LEFT(PUT(NUMCTY,3.)),LEFT(CTYOBS));
    END; 
IF EOF THEN                     
    CALL SYMPUT('MTOTCT',NUMCTY);
RUN;


下面是我自己写的宏,实现多个数据集的生成:
这里dsn是原数据集,byvar是要根据哪个变量的值来生成数据集
option mprint;
%macro groups(dsn,byvar);
  data %do i=1 %to &MTOTCT;
        &&MCTY&i
       %end;;
    set &dsn;
      %do i=1 %to &MTOTCT;
        if &byvar="&&MCTY&i" then output &&MCTY&i;
      %end;
  run;
%mend groups;
%groups(COUNTYDT, COUNTYNM);

这里只得到了数据集,我们还可以直接输出到多个excel文件,等等,总之可以做很多事情,希望能和大家多多交流。
参考资料:
http://support.sas.com/kb/26/140.html

0 comments:

 
Copyright 2010 NiuNiu's Warehouse. Powered by Blogger
Blogger Templates created by DeluxeTemplates.net | Blogger Styles | Balance Transfer Credit Cards
Wordpress by Wpthemescreator
Blogger Showcase