lyceum 发表于 2011-7-9 01:18 
原始数据很大无法手工完成,数据结构如下
data test;
input id $ date ;
datalines;
p01   07/09/2007
p01   09/11/2008
p01  06/05/2009
p02  10/24/2007
p02  12/19/2008
p03  05/10/2007
p03  08/12/2008
p04  0626/2007
p04  08/12/2008
p04  07/21/2009
p04  08/22/2010
;
run;
想得到以下分组结果,即同一id时间上依次两两分组,比如对于P02 或者p03来讲只有两条数据那么就直接保留原始分组就可以了,但对于p01因为有三条数据那么就要重复使用 p01   09/11/2008这条数据以达到时间上依次两两分组的目的,对于P04也是一样的只是需要分更多的组以达到时间上每个id都是下面的时间和上面的时间两两分组,(分组后的id 没有什么限制可以用保留原来的也可以给新的id比如group1,group2 等)。不知讲清楚了没有,请高手帮忙,先谢了!
p01   07/09/2007
p01   09/11/2008
p01  09/11/2008
p01  06/05/2009
p02  10/24/2007
p02  12/19/2008
p03  05/10/2007
p03  08/12/2008
p04  0626/2007
p04  08/12/2008
p04 08/12/2008
p04  07/21/2009
p04 07/21/2009
p04  08/22/2010
Here is a solution with a simple logic....
data test;
input id $ date ;
informat date mmddyy10.;
format date date9.;
datalines;
p01   07/09/2007
p01   09/11/2008
p01  06/05/2009
p02  10/24/2007
p02  12/19/2008
p03  05/10/2007
p03  08/12/2008
p04  06/26/2007
p04  08/12/2008
p04  07/21/2009
p04  08/22/2010
p04  08/24/2010
p04  08/25/2010
p04  08/29/2010
;
proc sql;
create table test2 as
select *, count(*)*0.5 as mean
from test
group by 1
order by 1,2
;
quit;
data test3;
  set test2;
  by id;
  if first.id then N=0;
  N+1;
  if n-mean=0.5 then do;  
   group=1;
      output;
  end;
  if n-mean<=0 then group=1;
  else group=2;
  output;
  run;
  proc print;run;