请选择 进入手机版 | 继续访问电脑版
楼主: h52101019
1687 9

SAS的Data重組 [推广有奖]

  • 0关注
  • 0粉丝

大专生

5%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
166 点
帖子
27
精华
0
在线时间
46 小时
注册时间
2009-9-30
最后登录
2019-2-1

h52101019 发表于 2014-8-10 06:27:09 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有個dataset:




id

value

year_1

year_2

2

600000

1995

2001

2

500000

2000

2014

2

400000

2008

2014



想要把它變成output:
idyearvalue

2

1995

600000

2

1996

600000

2

1997

600000

2

1998

600000

2

1999

600000

2

2000

600000

2

2001

600000

2

2002

600000

2

2003

600000

2

2004

600000

2

2005

600000

2

2006

600000

2

2007

600000

2

2008

1000000

2

2009

1000000

2

2010

1000000

2

2011

1000000

2

2012

1000000

2

2013

1000000

2

2014

1000000



基本上value的數值只會增加而不會減少。
若是year有重疊超過兩年的話,value會將兩個數值加起來。
但是year重疊沒有超過兩年,就是會最高值的value。
舉例來說,
在1995-2001和2000-2014兩個區間中,2000這一年沒有重疊超過兩年,所以我們在600000和500000中選擇最大值680000。


在2000-2014和2008-2014兩個區間中,2008這一年重疊超過兩年,所以將600000和400000加起來為1000000.

感謝大家的幫忙:)

二维码

扫码加我 拉你入群

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

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

关键词:Data sas的 dataset output value

viavia 学生认证  发表于 2014-8-10 13:47:04 |显示全部楼层 |坛友微信交流群
是不是这样?
  1. data a;
  2. input id value year_1 year_2 ;
  3. cards;
  4. 2 600000 1995 2001
  5. 2 500000 2000 2014
  6. 2 400000 2008 2014
  7. ;
  8. run;
  9. data b;
  10. retain x;
  11. set a;
  12. if   year_1<lag(year_2) and year_1>lag(year_2)-2 then value=max(value,x);
  13. if year_1-lag(year_2)<=-2 then value+x;
  14. x=value;
  15. do year=year_1 to year_2;
  16. output;
  17. end;
  18. keep id year value ;
  19. run;
  20. proc sort data=b;
  21. by year descending value;
  22. run;
  23. data c;
  24. retain  id year value;
  25. set b;
  26. if year=lag(year) then delete;
  27. run;
复制代码

使用道具

h52101019 发表于 2014-8-11 00:39:11 |显示全部楼层 |坛友微信交流群
viavia 发表于 2014-8-10 13:47
是不是这样?
這個run出來 value全部等於0耶
我不知道為什麼

使用道具

bert810811 在职认证  发表于 2014-8-11 00:48:56 |显示全部楼层 |坛友微信交流群
我修正了樓上大大的,你試試看:)

data a;
input id $ value year_1 year_2 ;
datalines;
2 600000 1995 2001
2 500000 2000 2014
2 400000 2008 2014
;
run;
data b;
set a;
retain x;
if year_1<lag(year_2) and year_1>lag(year_2)-2 then value=max(value,x);
if year_1-lag(year_2)<=-2 then value+x;
x=value;
do year=year_1 to year_2;
output;
end;
keep id year value ;
run;
proc sort data=b;
by year descending value;
run;
data c;
retain  id year value;
set b;
if year=lag(year) then delete;
run;
proc print data=c;
run;

使用道具

h52101019 发表于 2014-8-11 00:55:56 |显示全部楼层 |坛友微信交流群
viavia 发表于 2014-8-10 13:47
是不是这样?
沒事沒事 是我自己打錯了 不好意思

感謝幫忙! 真的非常感謝!

使用道具

h52101019 发表于 2014-8-11 00:56:28 |显示全部楼层 |坛友微信交流群
bert810811 发表于 2014-8-11 00:48
我修正了樓上大大的,你試試看:)

data a;
好的 感謝感謝

使用道具

h52101019 发表于 2014-8-11 02:06:44 |显示全部楼层 |坛友微信交流群
viavia 发表于 2014-8-10 13:47
是不是这样?
若是我有很多個id 那我該在哪加個by id呢?
試了很多次 都沒有run出output

使用道具

viavia 学生认证  发表于 2014-8-11 21:11:35 |显示全部楼层 |坛友微信交流群
不知道你的原始数据集是不是默认地以id year_1的升序排列,还有就是上下连续的、但id不同的时间区间重叠时怎么处理?
  1. 1 300000 1992 1995
  2. 2 600000 1995 2001
复制代码
试试这样满不满足你的要求:
  1. data a;
复制代码

使用道具

viavia 学生认证  发表于 2014-8-11 21:15:48 |显示全部楼层 |坛友微信交流群
  1. data a;
  2. input id value year_1 year_2 ;
  3. cards;
  4. 1 200000 1989 1991
  5. 1 300000 1992 1995
  6. 2 600000 1995 2001
  7. 2 500000 2000 2014
  8. 2 400000 2008 2014
  9. ;
  10. run;

  11. data b;
  12. retain x;
  13. set a;
  14. if year_1<lag(year_2) and year_1>lag(year_2)-2 then value=max(value,x);
  15. if  year_1>lag(year_1) and year_1-lag(year_2)<=-2 then value+x;
  16. x=value;
  17. do year=year_1 to year_2;
  18. output;
  19. end;
  20. keep id year value ;
  21. run;
  22. proc sort data=b;
  23. by id year descending value;
  24. run;
  25. data c;
  26. retain  id year value;
  27. set b;
  28. if id=lag(id) and year=lag(year) then delete;
  29. run;
复制代码

使用道具

h52101019 发表于 2014-8-18 10:50:45 |显示全部楼层 |坛友微信交流群
viavia 发表于 2014-8-11 21:15
不好意思 這麼晚才回你
你的code一定沒問題 我的data有問題 所以才run不出來

感謝 非常感謝

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-18 23:45