全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1924 9
2014-08-10
我有個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.

感謝大家的幫忙:)

二维码

扫码加我 拉你入群

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

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

全部回复
2014-8-10 13:47:04
是不是这样?
复制代码
二维码

扫码加我 拉你入群

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

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

2014-8-11 00:39:11
viavia 发表于 2014-8-10 13:47
是不是这样?
這個run出來 value全部等於0耶
我不知道為什麼
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

2014-8-11 00:55:56
viavia 发表于 2014-8-10 13:47
是不是这样?
沒事沒事 是我自己打錯了 不好意思

感謝幫忙! 真的非常感謝!
二维码

扫码加我 拉你入群

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

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

2014-8-11 00:56:28
bert810811 发表于 2014-8-11 00:48
我修正了樓上大大的,你試試看:)

data a;
好的 感謝感謝
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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