全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学
4202 7
2009-10-23
数据按code分组,要删除最后三年的数据,比如code是1471的组里删除2001,2002,2003年的数据,code是4372的组里删除2004,2005,2006年的数据,code是5398的组里删除1998,1999,2000年的数据...高手们帮帮忙!
附件列表

Book2.xls

大小:1.88 MB

 马上下载

二维码

扫码加我 拉你入群

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

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

全部回复
2009-10-23 16:36:43
data x;
input Code        Year        ML        BL        LTU;
cards;
/*数据区*/
;run;

/*设每组code需要删除的year数目定义为n,若源数据每组year数目不足n的则定义为删除整组*/


%let n=3;
proc sql noprint;create table x_new as select *,count(*)/4 as d
from x group by code having d>&n ;
select * from x_new order by code , year desc;
create table final as select  * from x_new group by code
having min(year)+&n<=year<=max(year) order code ,year desc;quit;
二维码

扫码加我 拉你入群

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

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

2009-10-23 23:06:53
proc sort data=x;
  by code descending year ;
run;

data final(drop count);
  set x;
  by code descending year;
  count+1;
  if first.code then count=1;
  if count>3;
run;
二维码

扫码加我 拉你入群

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

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

2009-10-25 03:16:27
Here is one-step data step solution. It is assumed that data is sorted by code and year.

data a;
  do code=1,2,3;
     numyear=ceil(ranuni(567)*10)+3;
         do i=1 to numyear;
           year=2000+i;
           output;
         end;
end;
drop i numyear;
run;

data b;
n=0;
do until(last.code);
  set a;
  n+1;
  by code;
end;
l=0;
do until(last.code);
  set a;
  l+1;
  by code;
  if l<=n-3 then output;
end;
keep code year;
run;

proc print; run;
二维码

扫码加我 拉你入群

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

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

2009-10-25 10:26:53
请问用二楼的方法怎么删除5年和10年的数据?
3年的删除很成功,不过把3改成5以后,后面几排数据就乱了。
二维码

扫码加我 拉你入群

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

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

2009-10-27 20:11:09
说的太难了吧
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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