生成 3 年时间间隔的累计交易价值总和
Generating cumulative sum of deal values for 3 year intervals
请注意,此内容已发布在 statalist 中。重新发布在这里是因为 link 到我的 dta.file 在 statalist 中不起作用。这是该帖子中的 link:
http://www.statalist.org/forums/forum/general-stata-discussion/general/852325-generating-cumulative-sum-of-deal-values-for-3-year-intervals
我正在尝试生成任何收购公告前 3 年内收购目标公司的累计交易价值总和(百万英镑)。我尝试使用 Stata Journal (2007) 7: Events in intervals 中给出的类似代码,但无法获得所需的结果。
我用来生成此总和的代码(我不确定如何生成累积总和)作为 yr3_cum_dealval 在 3 年的时间间隔内:
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'
}
此处,deal_value_mn 是以百万英镑为单位支付的金额。对于每次收购,lspdno 是每个收购公司的唯一 ID,event_date 每次收购的公告日期 deal/acquisition,1098 = 366*3(3 年间隔)。
我不明白 yr3_cum_dealval 栏中的内容,为什么我在 3 年的跨度内总是将“0”作为起始交易价值,而它应该是第一次收购中支付的实际金额, 第二次收购的第一笔交易金额和第二笔交易金额的总和,同样是前两次支付的金额加上第三次收购的累计交易金额的总和(前提是前两次收购发生在 3 年内)第三笔交易)等等。
此外,当同一天宣布 2 次收购时,每个日期的累计交易价值应该不同(对于 2 次相同日期的收购,我得到相同的 yr3_cum_dealval),第一个相同日期的总和应该是前 3 年交易支付的金额以及当前交易金额,而第 2 个相同日期的第一个 event_date 支付金额应包含在与前 3 年金额的累计总和中,以及对应于当前收购。
我正在将 dropbox link 粘贴到 dta.file,其中包含我的数据快照,其中只有 1 家公司从 1994 年到 2006 年进行了多次收购,其中名称为 yr3_cum_dealval 的列显示我使用上面的代码得到的,而 Correct_yr3_cum_dealval 显示我需要得到的。
https://dl.dropboxusercontent.com/u/64545449/cumul_dealvalue_ranks.dta
请帮我更正此代码。
谢谢,Suparna Ray
此处给出了样本数据的相关部分以及另一个变量 wanted
。 (像这样直接发布示例数据通常比将 link 发布到文件更有帮助。)
. l lspdno deal_value_mn event_date yr3 correct event_date wanted
+--------------------------------------------------------------------------+
| lspdno deal_v~n event_d~e yr3_cu~l correc~l event_d~e wanted |
|--------------------------------------------------------------------------|
1. | 286 214.1 03oct1994 0 214.1 03oct1994 214.1 |
2. | 286 100 11jul1995 214.1 314.1 11jul1995 314.1 |
3. | 286 126.1 19oct1998 0 126.1 19oct1998 126.1 |
4. | 286 214.1 01nov1999 126.1 340.2 01nov1999 340.2 |
5. | 286 214.1 26may2000 340.2 554.3 26may2000 554.3 |
|--------------------------------------------------------------------------|
6. | 286 214.1 06jul2000 554.3 768.4 06jul2000 768.4 |
7. | 286 5.6 01aug2000 768.4 774 01aug2000 774 |
8. | 286 58.4 04jul2002 647.9 492.2 04jul2002 706.3 |
9. | 286 170.6 08oct2002 706.3 662.8 08oct2002 876.9 |
10. | 286 214.1 31dec2002 662.8 876.9 31dec2002 876.9 |
|--------------------------------------------------------------------------|
11. | 286 214.1 22jul2004 443.1 657.2 22jul2004 1395.4 |
12. | 286 738.2 22jul2004 443.1 1395.4 22jul2004 1395.4 |
13. | 286 214.1 25sep2005 1337 1551.1 25sep2005 1551.1 |
14. | 286 299.8 19may2006 1166.4 1466.2 19may2006 1680.3 |
15. | 286 214.1 19may2006 1166.4 1680.3 19may2006 1680.3 |
+--------------------------------------------------------------------------+
我在这里看到三个困惑:
首先,正如评论中已经指出的,因为你想包括当前交易,你的 inrange()
条件应该是
inrange(event_date[`i'] - event_date, 0, 1098)
N.B。 0 不是 1。
其次,您对正确内容的指示似乎部分不正确:特别是观察 11 和 12 是同一日期,14 和 15 也是如此。据我了解,您想要的变量值应该因此是相同的,而不是不同的。
第三,您将其视为累加和,但至少就 Stata 而言,它是一个区间内的和,累加和语法无关紧要。请注意,函数(不是命令)sum()
是 returns 的累加和。
变量wanted
由
计算
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 中。重新发布在这里是因为 link 到我的 dta.file 在 statalist 中不起作用。这是该帖子中的 link: http://www.statalist.org/forums/forum/general-stata-discussion/general/852325-generating-cumulative-sum-of-deal-values-for-3-year-intervals
我正在尝试生成任何收购公告前 3 年内收购目标公司的累计交易价值总和(百万英镑)。我尝试使用 Stata Journal (2007) 7: Events in intervals 中给出的类似代码,但无法获得所需的结果。
我用来生成此总和的代码(我不确定如何生成累积总和)作为 yr3_cum_dealval 在 3 年的时间间隔内:
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'
}
此处,deal_value_mn 是以百万英镑为单位支付的金额。对于每次收购,lspdno 是每个收购公司的唯一 ID,event_date 每次收购的公告日期 deal/acquisition,1098 = 366*3(3 年间隔)。
我不明白 yr3_cum_dealval 栏中的内容,为什么我在 3 年的跨度内总是将“0”作为起始交易价值,而它应该是第一次收购中支付的实际金额, 第二次收购的第一笔交易金额和第二笔交易金额的总和,同样是前两次支付的金额加上第三次收购的累计交易金额的总和(前提是前两次收购发生在 3 年内)第三笔交易)等等。 此外,当同一天宣布 2 次收购时,每个日期的累计交易价值应该不同(对于 2 次相同日期的收购,我得到相同的 yr3_cum_dealval),第一个相同日期的总和应该是前 3 年交易支付的金额以及当前交易金额,而第 2 个相同日期的第一个 event_date 支付金额应包含在与前 3 年金额的累计总和中,以及对应于当前收购。
我正在将 dropbox link 粘贴到 dta.file,其中包含我的数据快照,其中只有 1 家公司从 1994 年到 2006 年进行了多次收购,其中名称为 yr3_cum_dealval 的列显示我使用上面的代码得到的,而 Correct_yr3_cum_dealval 显示我需要得到的。
https://dl.dropboxusercontent.com/u/64545449/cumul_dealvalue_ranks.dta
请帮我更正此代码。
谢谢,Suparna Ray
此处给出了样本数据的相关部分以及另一个变量 wanted
。 (像这样直接发布示例数据通常比将 link 发布到文件更有帮助。)
. l lspdno deal_value_mn event_date yr3 correct event_date wanted
+--------------------------------------------------------------------------+
| lspdno deal_v~n event_d~e yr3_cu~l correc~l event_d~e wanted |
|--------------------------------------------------------------------------|
1. | 286 214.1 03oct1994 0 214.1 03oct1994 214.1 |
2. | 286 100 11jul1995 214.1 314.1 11jul1995 314.1 |
3. | 286 126.1 19oct1998 0 126.1 19oct1998 126.1 |
4. | 286 214.1 01nov1999 126.1 340.2 01nov1999 340.2 |
5. | 286 214.1 26may2000 340.2 554.3 26may2000 554.3 |
|--------------------------------------------------------------------------|
6. | 286 214.1 06jul2000 554.3 768.4 06jul2000 768.4 |
7. | 286 5.6 01aug2000 768.4 774 01aug2000 774 |
8. | 286 58.4 04jul2002 647.9 492.2 04jul2002 706.3 |
9. | 286 170.6 08oct2002 706.3 662.8 08oct2002 876.9 |
10. | 286 214.1 31dec2002 662.8 876.9 31dec2002 876.9 |
|--------------------------------------------------------------------------|
11. | 286 214.1 22jul2004 443.1 657.2 22jul2004 1395.4 |
12. | 286 738.2 22jul2004 443.1 1395.4 22jul2004 1395.4 |
13. | 286 214.1 25sep2005 1337 1551.1 25sep2005 1551.1 |
14. | 286 299.8 19may2006 1166.4 1466.2 19may2006 1680.3 |
15. | 286 214.1 19may2006 1166.4 1680.3 19may2006 1680.3 |
+--------------------------------------------------------------------------+
我在这里看到三个困惑:
首先,正如评论中已经指出的,因为你想包括当前交易,你的 inrange()
条件应该是
inrange(event_date[`i'] - event_date, 0, 1098)
N.B。 0 不是 1。
其次,您对正确内容的指示似乎部分不正确:特别是观察 11 和 12 是同一日期,14 和 15 也是如此。据我了解,您想要的变量值应该因此是相同的,而不是不同的。
第三,您将其视为累加和,但至少就 Stata 而言,它是一个区间内的和,累加和语法无关紧要。请注意,函数(不是命令)sum()
是 returns 的累加和。
变量wanted
由
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'
}