楼主: qkz627518
915 5

[数据管理求助] 关于时间累进加权 [推广有奖]

  • 0关注
  • 0粉丝

讲师

69%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
56.7885
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3571 点
帖子
207
精华
0
在线时间
684 小时
注册时间
2020-7-23
最后登录
2024-7-29

楼主
qkz627518 发表于 2021-11-9 19:15:19 |AI写论文
100论坛币
请问大家,stata如何计算时间上的反向累计加权平均值?
具体思想是,比如:在2006h2,就给2006h2的变量赋予权重为1,2006h1的变量赋予权重为1/2,2005h2的变量赋予权重为1/3······,计算2006h2及之前变量的所有加权平均值。以此类推,在每一个时间节点上,都给最近时期的变量赋予高的权重,请问这个循环语句应该怎么写呢或是有什么命令


halfyear        variable
2004h2        .1158473
2005h1        .197123
2005h2        .6549371
2006h1        .7112523
2006h2        -.8110056
2007h1        -.1182826
2007h2        -.0018191
2008h1        -.2019278
2008h2        .0102702
2009h1        -.2379171
2009h2        -.0918824
2010h1        -.0150432
2010h2        .9090409
2011h1        -.047904
2011h2        .0365674
2012h1        .3524516
2012h2        .0381953
2013h1        .0701639
2013h2        .030052
2014h2        -.1281992


最佳答案

关键词:Variable 加权平均值 循环语句 Half ABLE

回帖推荐

cw666 发表于4楼  查看完整内容

cw666 发表于2楼  查看完整内容

望采纳

黃河泉 发表于6楼  查看完整内容

Fei Wang 提供此程序:

沙发
cw666 发表于 2021-11-9 19:15:20
望采纳 57a7d2408663743847ec58bd38ab62d.png
  1. gen final = 0
  2. forvalues i = 1/20{    //20为样本量
  3. sort halfyear
  4. gen a = _n
  5. gen b = 0
  6. gen c = 0
  7. replace b = 1 if a == `i'   //定位需要处理的年份
  8. replace c = a if b == 1
  9. egen d = max(c)
  10. replace c = d + 1
  11. replace b = 1/(c-a)       //权重
  12. replace b = 0 if a > d
  13. gen e = sum(b*variable)
  14. replace final = e if b == 1
  15. drop a b c d e
  16. }
复制代码

藤椅
qianchen 发表于 2021-11-9 20:40:54
那2007年以后呢?还有你的数据是面板还是时间序列 最好贴数据

板凳
cw666 发表于 2021-11-10 14:05:11
  1. gen final = 0
  2. forvalues i = 1/20{    //20为样本量
  3. sort halfyear
  4. gen a = _n
  5. gen b = 0
  6. gen c = 0
  7. replace b = 1 if a == `i'   //定位需要处理的年份
  8. replace c = a if b == 1
  9. egen d = max(c)
  10. replace c = d + 1
  11. replace b = 1/(c-a)       //权重
  12. replace b = 0 if a > d
  13. gen e = sum(b*variable)
  14. replace final = e if b == 1
  15. drop a b c d e
  16. }
复制代码

57a7d2408663743847ec58bd38ab62d.png (20.8 KB)

57a7d2408663743847ec58bd38ab62d.png

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

报纸
Garzhun:) 学生认证  发表于 2021-11-10 15:52:44
用foreach命令应该可以

地板
黃河泉 在职认证  发表于 2021-11-11 08:44:09
Fei Wang 提供此程序:
  1. // Fei Wang
  2. gen w = 1/(_N-_n+1)
  3. gen wanted = sum(variable*w)
  4. forvalues i = `=_N-1'(-1)1 {
  5.     replace w = w[_n+1]
  6.     replace wanted = sum(variable*w) in 1/`i'
  7. }
  8. drop w
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
cw666 + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-2-8 18:53