全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1602 3
2011-07-09
原始数据很大无法手工完成,数据结构如下

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
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-7-9 09:29:11
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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-12 00:48:37
感谢教授热心帮助,思路简洁清晰,学习了,按照代码运行了一下似乎p04分组少了一些,不知什么原因。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-12 08:43:24
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群