楼主: GYHEMPIRE
5732 3

[一般统计问题] stata编程计算-如何对某变量跨年求和 [推广有奖]

  • 0关注
  • 5粉丝

已卖:4335份资源

博士生

11%

还不是VIP/贵宾

-

威望
0
论坛币
11497 个
通用积分
12.4428
学术水平
7 点
热心指数
10 点
信用等级
7 点
经验
2280 点
帖子
277
精华
0
在线时间
127 小时
注册时间
2009-10-21
最后登录
2020-7-30

楼主
GYHEMPIRE 发表于 2013-3-30 14:47:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据如下所示:
id        year        month        mtgrowth
106        2008        12        -.189898
106        2008        11        .062838
106        2008        10        -.017981
106        2008        09        -.036235
106        2008        08        .04701
106        2008        07        -.129576
106        2008        06        .14934
106        2008        05        -.109805
106        2008        04        -.122462
106        2008        03        .036118
106        2008        02        .065664
106        2008        01        .135678
106        2007        12        .003024
106        2007        11        .146291
106        2007        10        .079591
107        2008        04        .051582
107        2008        03        .023223
107        2008        02        .047935
107        2008        01        -.005136
107        2007        12        .034928
107        2007        11        -.046343

对每个id,特定年份月份,求其前12个月mtgrowth的之和。比如对于106,在2008年12月,对2007年12月至2008年11月的mtgrowth之和;对于106,在2008年11月,对2007年11月至2008年10月的mtgrowth之和;对于106,在2008年11月,对2007年10月至2008年09月的mtgrowth之和;对于106,在2008年10月,对2007年09月至2008年08月的mtgrowth之和,但由于2007年09月缺失,故该求和值也缺失。用同样的方法,求id=107的各值。

gen mtg = .
forvalues i=2007/2008{
  forvalues j=1/12{
    by code, sort: egen mtg_`i'_`j' = sum(mtgrowth) if year==`i' & month<`j' & month>`j'-13
    replace mtg = L.mtg_`i'_`j' if year==`i' & month==`j'
  }
}

有两个疑问:
1) 当取滞后时,需要xtset,但直接用xtset id week并不对;
2) 这种求法只能求同一年内,不能跨年求和。

由于数据集很大,总样本数达到5-6万个,所以必须用循环语句。此外,数据非平衡面板,即有些有2006.03-2008.12,而有些则是2007.06-2008.09。。

谢谢各位高手啦!!

二维码

扫码加我 拉你入群

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

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

关键词:stata编程 Stata tata forvalues forvalue 如何

沙发
georgeshe 发表于 2013-3-30 15:17:39
个人建议,如果每个变量都是取前十个月的和,可以用:
sort id year month
by id:gen temp_x=_n
keep if temp_x<11
collapse (sum)mtgrowth,by(id)
然后再merge回去

藤椅
gaoxinsynge 发表于 2013-3-30 20:01:13
学习学习

板凳
GYHEMPIRE 发表于 2013-3-31 12:15:03
georgeshe 发表于 2013-3-30 15:17
个人建议,如果每个变量都是取前十个月的和,可以用:
sort id year month
by id:gen temp_x=_n
好的,多谢!

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-1 04:51