楼主: zdw515
326 2

[编程问题求助] stata 滚动窗口内先加权相乘再滚动求和 [推广有奖]

  • 16关注
  • 1粉丝

讲师

47%

还不是VIP/贵宾

-

威望
0
论坛币
22568 个
通用积分
19.2864
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
11305 点
帖子
374
精华
0
在线时间
675 小时
注册时间
2011-10-30
最后登录
2024-8-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
跨期滚动时(以滚动20期为例),计算滚动期的累计投入(total_invest)与clsprc相乘后的求和。累计投入即为100、200、300……2000,类似于加权相乘,再求和。不清楚是用循环还是矩阵,数据如下:
date                         week   invest        clsprc
2005-01-13        2005w2        100        1.013945
2005-01-20        2005w3        100        .9592328
2005-01-27        2005w4        100        1.019232
2005-02-03        2005w5        100        1.019074
2005-02-17        2005w7        100        1.027577
2005-02-24        2005w8        100        1.024348
2005-03-03        2005w9        100        .9830219
2005-03-10        2005w10        100        .9948429
2005-03-17        2005w11        100        .9710977
2005-03-24        2005w12        100        .9717382
2005-03-31        2005w13        100        .9765754
2005-04-07        2005w14        100        1.045139
2005-04-14        2005w15        100        1.002275
2005-04-21        2005w16        100        .9564424
2005-04-28        2005w17        100        .9979767
2005-05-12        2005w19        100        .940291
2005-05-19        2005w20        100        .9981373
2005-05-26        2005w21        100        .9696438
2005-06-02        2005w22        100        .9545683
2005-06-09        2005w23        100        1.11513
2005-06-16        2005w24        100        .9634451
2005-06-23        2005w25        100        1.016298
2005-06-30        2005w26        100        .9833477
2005-07-07        2005w27        100        .9613516
2005-07-14        2005w28        100        1.005753
2005-07-21        2005w29        100        .9934086
2005-07-28        2005w30        100        1.055569
2005-08-04        2005w31        100        1.014884
2005-08-11        2005w32        100        1.055124
2005-08-18        2005w33        100        .965073
2005-08-25        2005w34        100        1.010264
2005-09-01        2005w35        100        1.015525
2005-09-08        2005w36        100        1.011349
2005-09-15        2005w37        100        1.01499
2005-09-22        2005w38        100        .9522174
2005-09-29        2005w39        100        .9920933
2005-10-13        2005w41        100        1.000579
2005-10-20        2005w42        100        .9818985
2005-10-27        2005w43        100        .973264
2005-11-03        2005w44        100        .99855
2005-11-10        2005w45        100        .986725
2005-11-17        2005w46        100        .9996408
2005-11-24        2005w47        100        1.021828
2005-12-01        2005w48        100        .990448
2005-12-08        2005w49        100        1.001134
2005-12-15        2005w50        100        1.025593
2005-12-22        2005w51        100        1.013743
2005-12-29        2005w52        100        1.025618
2006-01-05        2006w1        100        1.029076
2006-01-12        2006w2        100        1.025638

二维码

扫码加我 拉你入群

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

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

关键词:Stata tata Invest Total Vest

沙发
赵安豆 发表于 2024-7-26 15:29:48 |只看作者 |坛友微信交流群
在Stata中,你可以使用`tsset`命令设置时间序列数据,并利用`rolling`命令来实现滚动窗口的计算。不过,在这个特定的情况下,因为需要在每个窗口内进行加权相乘再求和的操作,这通常不直接通过一个简单的函数实现,而可能需要自己编写一个程序。

这里提供一种使用循环的方式:

1. **首先设置时间序列**:确保你的数据按照`date`排序,并且使用`tsset date`命令告诉Stata数据是时间序列的。
2. **定义加权计算过程**:创建一个计算权重累积乘积再求和的过程。这可以通过在每个窗口内遍历数据点实现。

以下是一个基本的例子,假设你有数据存储在一个名为 `data` 的Stata 数据集中:

```stata
clear all
use data, clear

* 确保按日期排序数据
tsset date

* 声明一个变量用于保存结果
gen weighted_sum = .

* 定义窗口大小(例如20期)
local window_size = 20

preserve

qui forvalues i = `= _N - (`window_size'-1)'/`=1' {
    qui replace weighted_sum = (sum(invest * clsprc) if _n >= `_i' & _n <= `_i'+(`window_size'-1)) in `_i'
}

restore

* 现在`weighted_sum`包含了每个20期窗口内的加权求和结果
```

但是,上面的代码有一个问题:它直接计算了所有投资乘以价格后的累加值。根据你的描述,“累计投入即为100、200、300……2000”,这暗示需要在每期的投资基础上进行累加,并将这个累积值与`clsprc`相乘,然后在这个窗口中求和。

一个更准确的实现可能涉及到先计算累积投资(使用`egen, total()`或`summarize`中的`detail`选项),再与价格相乘并求和。但是由于你的描述,“加权”和“滚动”的具体含义有些模糊,特别是当提及“累计投入即为100、200、300……2000”时,这可能指的是累积投资的序列,并非通常意义上的权重。

因此,在实际应用中,请根据上述指导进行调整以匹配你的具体需求。如果需要计算的是一个真正基于期数递增的加权(如每期乘以不同的权重),你可能还需要在循环内部生成对应的权重值数组,然后用这个权重与`invest * clsprc`的结果相乘。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



使用道具

藤椅
zdw515 发表于 2024-7-27 11:38:15 |只看作者 |坛友微信交流群
赵安豆 发表于 2024-7-26 15:29
在Stata中,你可以使用`tsset`命令设置时间序列数据,并利用`rolling`命令来实现滚动窗口的计算。不过,在这 ...
确实是先计算累积投资(使用`egen, total()`或`summarize`中的`detail`选项),再与价格相乘并求和。累计投入即为100、200、300……2000”时,指的是累积投资的序列。

使用道具

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

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

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

GMT+8, 2024-9-8 08:22