Stata 以3年为间隔生成交易价值的累计总和

Stata 以3年为间隔生成交易价值的累计总和,stata,Stata,请注意,此内容已在statalist中发布。重新发布在这里,因为指向我的dta.file的链接在StatList中不起作用。以下是该帖子的链接: 我正试图在任何收购公告发布前的3年内,为收购目标公司创造累计交易价值总和(百万英镑)。我曾尝试使用类似的代码,如Stata Journal(2007)7:事件间隔中所给出的代码,但无法得到预期的结果 我用来在3年内以yr3_cum_dealval的形式生成此总和(我不确定如何生成累积总和)的代码: gen yr3_cum_dealval = . qu

请注意,此内容已在statalist中发布。重新发布在这里,因为指向我的dta.file的链接在StatList中不起作用。以下是该帖子的链接:

我正试图在任何收购公告发布前的3年内,为收购目标公司创造累计交易价值总和(百万英镑)。我曾尝试使用类似的代码,如Stata Journal(2007)7:事件间隔中所给出的代码,但无法得到预期的结果

我用来在3年内以yr3_cum_dealval的形式生成此总和(我不确定如何生成累积总和)的代码:

gen yr3_cum_dealval = .
quietly forval i = 1/`= _N' {
sum (deal_value_mn) if lspdno == lspdno[`i'] & inrange(event_date[`i'] – event_date, 1, 1098)
replace yr3_cum_dealval = r(sum) in `i'
}
此处,交易价值是以百万英镑为单位支付的金额。对于每次收购,lspdno是每个收购公司的唯一id,每次交易/收购的公告日期,1098=366*3(间隔3年)

我不明白在yr3_cum_dealval一栏中,为什么我总是在3年的时间内得到“0”作为起始交易价值,而应该是第一次收购的实际支付金额,第二次收购的第一笔交易金额和第二笔交易金额之和,同样,如果第三次收购的累计交易价值(前提是前两次收购发生在第三次交易的3年内),则前两次支付的金额加上第三次支付的金额之和,依此类推。 此外,当在同一日期宣布了两次收购时,每个日期的累计交易价值应不同(我获得了相同的yr3_cum_dealval,用于两次同一日期的收购),第一个同一日期应包含前三年交易的支付金额和当前交易金额,而第二个相同日期的第一个相同事件日期的已支付金额应包含在前三年的累计金额中,以及与当前收购相对应的金额

我正在将dropbox链接粘贴到dta.file,其中有一家公司的数据快照,该公司从1994年到2006年进行了多次收购,其中名为yr3_cum_dealval的列显示了我使用上述代码获得的数据,而Correct_yr3_cum_dealval显示了我需要获得的数据

请帮我更正这个代码


谢谢,Suparna Ray

这里提供了样本数据的相关部分,以及另一个需要的变量
。(像这样直接发布示例数据通常比发布文件链接更有帮助。)

我在这里看到三个困惑:

首先,正如注释中已经指出的,当您想要包括当前事务时,您的
inrange()
条件应该是

   inrange(event_date[`i'] - event_date, 0, 1098) 
注意:0不是1

第二,你对什么是正确的表示似乎部分是错误的:特别是观察结果11和12是同一日期,14和15也是同一日期。据我所知,您想要的变量的值应该是相同的,而不是不同的

第三,您认为这是一个累积和,但至少就Stata而言,它是一个区间内的和,累积和语法是不相关的。请注意,函数(非命令)
sum()
是返回累计和的函数

所需变量<代码>的计算公式为

gen wanted = . 

quietly forval i = 1/`=_N' {
    sum (deal_value_mn) if lspdno == lspdno[`i'] & inrange(event_date[`i'] - event_date, 0, 1098)
    replace wanted = r(sum) in `i' 
} 

你应该明确提到这一点,让人们知道这一点很重要,因为在这个帖子上已经有了讨论,而不仅仅是一个问题。谢谢你提到这一点-我已经添加了一个链接到我的statalist帖子。你假设你的日期变量是每日日期变量。你应该检查一下这是不是真的。如果您对日期变量进行了
汇总
,则其平均值应小于20000。如果你有一个非常不同的数字,那是另外一个。是的,我的event_date变量是一个daily date变量,平均值为15249.87-对不起,我不太明白这会对代码产生什么影响,因为我使用了类似的代码(不完全是这样)在计算3年内之前的收购数量之前&我也使用了相同的daily date变量,使用了您在Stata journal 7中给出的代码-它工作得很好,为什么不在这里工作?我不是在计算之前交易的数量,而是在尝试生成每次收购之前支付的累计金额。因为如果你的变量真的是日期-时间变量,那么1098将是1098毫秒。显然这不是问题。非常感谢,尼克-我现在理解了我的错误代码。在你提出的3点中,我想指出关于第二点,因为在同一天为两次收购支付的金额是不同的,例如观察11和12,一个金额=214.1,而另一个是738.2,据我所知,累计总和(尽管此处的总和以区间表示)应该不同。但是目前的代码没有提供。对不起,你把我弄丢了。准则将以同样的方式处理同一日期的观察结果;如果这不是您想要的,那么需要更改代码。。。。此外,您的结果将不可复制。您的意思是,在不影响不同日期的累计金额的情况下,不能以有效的方式更改代码,仅更改同一公司在同一日期支付的相同累计金额吗?谢谢你发布数据-下次我会记得以你展示的方式发布我的样本数据。如果你横过帖子,完成它会变得很复杂!
gen wanted = . 

quietly forval i = 1/`=_N' {
    sum (deal_value_mn) if lspdno == lspdno[`i'] & inrange(event_date[`i'] - event_date, 0, 1098)
    replace wanted = r(sum) in `i' 
}