找回密码
 注册
查看: 3384|回复: 0

跟版主crackman读SAS程序(19)---根据BY分组创建不同的数据集

[复制链接]
发表于 2010-8-27 16:24:07 | 显示全部楼层 |阅读模式

/*用宏程序按照数据集中的BY分组变量来创建不同的数据集*/
data test;
  input color $ num;
datalines;
blue 1
blue 2
blue 3
green 4
green 5
red 6
red 7
red 8
;
/* 创建一个新的宏变量VARn*/
/* 创建一个新变量flag,这个用来记录每一组,按照BY分了三组,每一组里面的FLAG是一样的,但是不同的COLOR组是不一样,递增的关系
例如1,2,3然后根据FLAG创建宏变量
VAR1 VAR2 VAR3.....*/
data we;
  set test end=eof;
  by color;
  if first.color then do;
   flag+1;
   call symput('var'||put(flag,8. -L),color);
  end;
  /* 最后一个观测时,将此时的FLAG创建并赋值给宏变量TOT,也就是TOT这个宏变量记录了分组数 */                              
  if eof then call symput('tot',put(flag,8. -L));
run;
/* 动态创建数据集,根据宏变量根据IF THEN语句判断输出到不同的数据集中*/
                                       
%macro groups(dsn,byvar);
  data %do i=1 %to &tot; /*如果TOT=3的话,那么就是等价于&var1,&var2,&var3*/
         &&var&i
       %end;;
    set &dsn;
      %do i=1 %to &tot;
        if &byvar="&&var&i" then output &&var&i;
      %end;
  run;
%mend groups;
%groups(test,color)
proc print data=blue;
  title 'Blue';
run;
proc print data=green;
  title 'Green';
run;
proc print data=red;
  title 'Red';
run;




这里有一个技巧就是
call symput('var'||put(flag,8. -L),color);
这句是创建的一个系列的宏变量,而不是一个宏变量
可以对照symget来看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-12-4 01:23 , Processed in 0.023518 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表