楼主: burnpark
4307 7

sas 删除每组数据的最后3行 [推广有奖]

  • 1关注
  • 2粉丝

已卖:1份资源

讲师

21%

还不是VIP/贵宾

-

威望
0
论坛币
2979 个
通用积分
6.6000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4270 点
帖子
128
精华
0
在线时间
591 小时
注册时间
2009-3-17
最后登录
2024-10-13

楼主
burnpark 发表于 2009-10-23 15:38:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据按code分组,要删除最后三年的数据,比如code是1471的组里删除2001,2002,2003年的数据,code是4372的组里删除2004,2005,2006年的数据,code是5398的组里删除1998,1999,2000年的数据...高手们帮帮忙!
二维码

扫码加我 拉你入群

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

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

关键词:code COD ODE

沙发
sushe1527 发表于 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;

藤椅
guoluo 发表于 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;

板凳
bobguy 发表于 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;

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

地板
lei_108 发表于 2009-10-27 20:11:09
说的太难了吧

7
burnpark 发表于 2009-11-9 21:45:42
用了3楼的方法,感谢大家的答案~

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 05:58