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;