楼主: che_nax
1988 1

[其他] 如何添加moving window [推广有奖]

  • 2关注
  • 0粉丝

本科生

81%

还不是VIP/贵宾

-

威望
0
论坛币
214 个
通用积分
0.0600
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
14968 点
帖子
32
精华
0
在线时间
191 小时
注册时间
2008-3-12
最后登录
2023-1-31

5论坛币
数据集是若干个公司1984-2010的alliance合作数据,alliance以announced时间为准。如果一个alliance的activity为research & development,则eo值为1,ei值为0. 每个observation为某公司一年所有announced alliance的eo与ei总和。
希望求得的结果:假设每个alliance维持时间为五年,那么某个公司在一年中所有的alliance(包括当年announce的和往年的仍在运作中的)的eo和ei系数为多少。比如A公司97年的eo ei值,即93-97年五年的eo ei值的总和,98年的eo ei值即94-98年eo ei值的总和……依此类推。目前的问题就是年代不连续,比如id为2的公司03年向前追溯5年就只有01年的数据,那么03年的新eo值即03年与01年eo值的加合。

求高人指点应如何操作。


idyeareoei

1

1997

0.5

0.5

2

1993

0

1

2

1994

1

0

2

1995

1

0

2

2001

0

1

2

2003

1

0

2

2006

1

0

3

1985

0

4

3

1988

0

1

3

1990

1.083333

5.916667

3

1991

1.25

7.75

3

1992

0.75

6.25

3

1993

2.083333

6.916667

3

1994

3.983333

8.016666

3

1995

1.583333

5.416667

3

1996

1.75

5.25

3

1997

3

9

3

1998

1

5

3

1999

1.166667

7.833333

3

2000

0

5

3

2001

1.5

0.5

3

2002

1.5

4.5

3

2003

0

7

3

2004

1.333333

1.666667

3

2005

1.333333

0.666667

3

2006

0.5

0.5

3

2007

0

2

3

2008

0

2

3

2009

1

0

关键词:Window Moving wind Dow IND research activity window moving 如何
沙发
che_nax 发表于 2012-4-20 22:49:41 |只看作者 |坛友微信交流群
结果做出来了,但是过程比较复杂,各种重复……:
针对每一个id生成1984-2010的年代对应obs,merge到原有数据中,将missing转化为0,保留_merge
计算出每年的5-year-window eo值和ei值,然后再保留 _merge=3的数据

求优化,论坛币奉送

do file:
set obs 234
gen id=_n
expand 27
bys id: gen year=1983+_n
sort id year
save "R:\r.dta", replace
use biophare /*filename*/
sort id year
merge id year using "R:\r.dta"
sort id year
recode eo ei (.=0)
by id: gen eos=eo+eo[_n-1]+eo[_n-2]+eo[_n-3]+eo[_n-4]
by id: replace eos=eo+eo[_n-1]+eo[_n-2]+eo[_n-3] if eos==.
by id: replace eos=eo+eo[_n-1]+eo[_n-2] if eos==.
by id: replace eos=eo+eo[_n-1] if eos==.
by id: replace eos=eo if eos==.
by id: gen eis=ei+ei[_n-1]+ei[_n-2]+ei[_n-3]+ei[_n-4]
by id: replace eis=ei+ei[_n-1]+ei[_n-2]+ei[_n-3] if eis==.
by id: replace eis=ei+ei[_n-1]+ei[_n-2] if eis==.
by id: replace eis=ei+ei[_n-1] if eis==.
by id: replace eis=ei if eis==.
keep if _merge==3
keep id year eos eis

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

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

GMT+8, 2024-5-7 15:47