感谢您在我为自己的论文试图解决的挑战中所提供的帮助。我有两组数据,一组来自CRSP,包含月度股票收益数据,另一组包含我要合并的Compustat年度数据。我有一个唯一的标识符(permno)和日期变量,使合并成为可能,但我的问题是在Compustat中,我的数据集中的公司在不同点(例如,从一月到十二月,从三月到二月等)开始和结束会计年度)。
我的目标是在将每月CRSP数据与Compustat年份数据合并时使其与正确的会计年度匹配。
Compustat数据列数据日期表示公司会计年度结束的月份和年份。因此,如果一个固定的会计年度在2001年12月结束,我想将其与2001年1月至12月合并。
我必须承认,我不太熟悉R,因此我将CRSP与Compustat合并的努力并不成功。我尝试将CRSP和Compustat与permno和date合并,结果是预期会失败。由于Compustat数据仅与CRSP月合并,该月等于会计年度结束时的月份,而不与前11个月合并。
搜索了有关堆栈溢出和rstudio社区的解决方案,但找不到我可以用于此问题的任何解决方案。
计算机样品
compustat <- structure(list(datadate = structure(c(2001.91666666667, 2002.91666666667,
2001.58333333333, 2002.58333333333), class = "yearmon"),
fyr = c(12, 12, 8, 8), fyear = c(2001, 2002, 2001, 2002),
permno = c(61241, 61241, 53613, 53613), at = c(5647.242,
5619.181, 8363.2, 7555.4)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -4L))
compustat <-compustat %>% mutate(datadate = as.yearmon(as.Date(datadate)))
#> datadate fyr fyear permno at
#> 1 dec 2001 12 2001 61241 5647.242
#> 2 dec 2002 12 2002 61241 5619.181
#> 3 aug 2001 8 2001 53613 8363.200
#> 4 aug 2002 8 2002 53613 7555.400
CRSP样本
crsp <- structure(list(Date = structure(c(2001, 2001.08333333333, 2001.16666666667,
2001.25, 2001.33333333333, 2001.41666666667, 2001.5, 2001.58333333333,
2001.66666666667, 2001.75, 2001.83333333333, 2001.91666666667,
2002, 2002.08333333333, 2002.16666666667, 2002.25, 2002.33333333333,
2002.41666666667, 2002.5, 2002.58333333333, 2002.66666666667,
2002.75, 2002.83333333333, 2002.91666666667, 2000.66666666667,
2000.75, 2000.83333333333, 2000.91666666667, 2001, 2001.08333333333,
2001.16666666667, 2001.25, 2001.33333333333, 2001.41666666667,
2001.5, 2001.58333333333, 2001.66666666667, 2001.75, 2001.83333333333,
2001.91666666667, 2002, 2002.08333333333, 2002.16666666667,
2002.25, 2002.33333333333, 2002.41666666667, 2002.5, 2002.58333333333),
class = "yearmon"), permno = c(61241, 61241, 61241, 61241,
61241, 61241, 61241, 61241, 61241, 61241, 61241, 61241, 61241,
61241, 61241, 61241, 61241, 61241, 61241, 61241, 61241, 61241,
61241, 61241, 53613, 53613, 53613, 53613, 53613, 53613, 53613,
53613, 53613, 53613, 53613, 53613, 53613, 53613, 53613, 53613,
53613, 53613, 53613, 53613, 53613, 53613, 53613, 53613),
prc = c(24.6000003814697, 21.5, 26.5400009155273, 31, 28.25,
28.8999996185303, 18.2600002288818, 13.5500001907349,
8.14999961853027, 9.84000015258789, 13.5600004196167,
15.8599996566772, 16.0499992370605, 13.5, 14.710000038147,
11.1800003051758, 11.4300003051758, 9.72000026702881,
8.02999973297119, 8.85000038146973, 5.34000015258789,
6.1399998664856, 9, 6.46000003814697, 46, 34.75, 31.5,
35.5, 45.7700004577637, 34.2200012207031, 41.5299987792969,
45.3800010681152, 37.5, 41.0999984741211, 42, 37.6100006103516,
18.8299999237061, 22.7600002288818, 27.1599998474121,
31, 33.75, 32.1500015258789, 32.9000015258789, 23.7000007629395,
23.5799999237061, 20.2199993133545, 19.4899997711182,
17.25)), row.names = c(NA, -48L), class = c("tbl_df",
"tbl", "data.frame"))
compustat <-compustat %>% mutate(datadate = as.yearmon(as.Date(datadate)))
#> Date permno prc
#> 1 jan 2001 61241 24.60
#> 2 feb 2001 61241 21.50
#> 3 mrt 2001 61241 26.54
#> 4 apr 2001 61241 31.00
#> 5 mei 2001 61241 28.25
#> 6 jun 2001 61241 28.90
#> 7 jul 2001 61241 18.26
#> 8 aug 2001 61241 13.55
#> 9 sep 2001 61241 8.15
#> 10 okt 2001 61241 9.84
#> 11 nov 2001 61241 13.56
#> 12 dec 2001 61241 15.86
#> 13 jan 2002 61241 16.05
#> 14 feb 2002 61241 13.50
#> 15 mrt 2002 61241 14.71
#> 16 apr 2002 61241 11.18
#> 17 mei 2002 61241 11.43
#> 18 jun 2002 61241 9.72
#> 19 jul 2002 61241 8.03
#> 20 aug 2002 61241 8.85
#> 21 sep 2002 61241 5.34
#> 22 okt 2002 61241 6.14
#> 23 nov 2002 61241 9.00
#> 24 dec 2002 61241 6.46
#> 25 sep 2000 53613 46.00
#> 26 okt 2000 53613 34.75
#> 27 nov 2000 53613 31.50
#> 28 dec 2000 53613 35.50
#> 29 jan 2001 53613 45.77
#> 30 feb 2001 53613 34.22
#> 31 mrt 2001 53613 41.53
#> 32 apr 2001 53613 45.38
#> 33 mei 2001 53613 37.50
#> 34 jun 2001 53613 41.10
#> 35 jul 2001 53613 42.00
#> 36 aug 2001 53613 37.61
#> 37 sep 2001 53613 18.83
#> 38 okt 2001 53613 22.76
#> 39 nov 2001 53613 27.16
#> 40 dec 2001 53613 31.00
#> 41 jan 2002 53613 33.75
#> 42 feb 2002 53613 32.15
#> 43 mrt 2002 53613 32.90
#> 44 apr 2002 53613 23.70
#> 45 mei 2002 53613 23.58
#> 46 jun 2002 53613 20.22
#> 47 jul 2002 53613 19.49
#> 48 aug 2002 53613 17.25
2001财政年度的期望产量
crsp_comp <- structure(list(Date = structure(c(2000.66666666667, 2000.75,
2000.83333333333, 2000.91666666667, 2001, 2001.08333333333,
2001.16666666667, 2001.25, 2001.33333333333, 2001.41666666667,
2001.5, 2001.58333333333, 2001, 2001.08333333333, 2001.16666666667,
2001.25, 2001.33333333333, 2001.41666666667, 2001.5, 2001.58333333333,
2001.66666666667, 2001.75, 2001.83333333333, 2001.91666666667),
class = "yearmon"), permno = c(53613, 53613, 53613, 53613,
53613, 53613, 53613, 53613, 53613, 53613, 53613, 53613, 61241,
61241, 61241, 61241, 61241, 61241, 61241, 61241, 61241, 61241,
61241, 61241), prc = c(46, 34.75, 31.5, 35.5, 45.7700004577637,
34.2200012207031, 41.5299987792969, 45.3800010681152, 37.5,
41.0999984741211, 42, 37.6100006103516, 24.6000003814697,
21.5, 26.5400009155273, 31, 28.25, 28.8999996185303, 18.2600002288818,
13.5500001907349, 8.14999961853027, 9.84000015258789, 13.5600004196167,
15.8599996566772), datadate = structure(c(2001.58333333333,
2001.58333333333, 2001.58333333333, 2001.58333333333, 2001.58333333333,
2001.58333333333, 2001.58333333333, 2001.58333333333, 2001.58333333333,
2001.58333333333, 2001.58333333333, 2001.58333333333, 2001.91666666667,
2001.91666666667, 2001.91666666667, 2001.91666666667, 2001.91666666667,
2001.91666666667, 2001.91666666667, 2001.91666666667, 2001.91666666667,
2001.91666666667, 2001.91666666667, 2001.91666666667), class = "yearmon"),
fyr = c(8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12), fyear = c(2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001), at = c(8363.2, 8363.2, 8363.2,
8363.2, 8363.2, 8363.2, 8363.2, 8363.2, 8363.2, 8363.2,
8363.2, 8363.2, 5647.242, 5647.242, 5647.242, 5647.242,
5647.242, 5647.242, 5647.242, 5647.242, 5647.242, 5647.242,
5647.242, 5647.242)), row.names = c(NA, -24L), class = "data.frame")
#> Date permno prc datadate fyr fyear at
#> 1 2000.667 53613 46.00 2001.583 8 2001 8363.200
#> 2 2000.750 53613 34.75 2001.583 8 2001 8363.200
#> 3 2000.833 53613 31.50 2001.583 8 2001 8363.200
#> 4 2000.917 53613 35.50 2001.583 8 2001 8363.200
#> 5 2001.000 53613 45.77 2001.583 8 2001 8363.200
#> 6 2001.083 53613 34.22 2001.583 8 2001 8363.200
#> 7 2001.167 53613 41.53 2001.583 8 2001 8363.200
#> 8 2001.250 53613 45.38 2001.583 8 2001 8363.200
#> 9 2001.333 53613 37.50 2001.583 8 2001 8363.200
#> 10 2001.417 53613 41.10 2001.583 8 2001 8363.200
#> 11 2001.500 53613 42.00 2001.583 8 2001 8363.200
#> 12 2001.583 53613 37.61 2001.583 8 2001 8363.200
#> 13 2001.000 61241 24.60 2001.917 12 2001 5647.242
#> 14 2001.083 61241 21.50 2001.917 12 2001 5647.242
#> 15 2001.167 61241 26.54 2001.917 12 2001 5647.242
#> 16 2001.250 61241 31.00 2001.917 12 2001 5647.242
#> 17 2001.333 61241 28.25 2001.917 12 2001 5647.242
#> 18 2001.417 61241 28.90 2001.917 12 2001 5647.242
#> 19 2001.500 61241 18.26 2001.917 12 2001 5647.242
#> 20 2001.583 61241 13.55 2001.917 12 2001 5647.242
#> 21 2001.667 61241 8.15 2001.917 12 2001 5647.242
#> 22 2001.750 61241 9.84 2001.917 12 2001 5647.242
#> 23 2001.833 61241 13.56 2001.917 12 2001 5647.242
#> 24 2001.917 61241 15.86 2001.917 12 2001 5647.242
由reprex软件包(v0.3.0)于2019-05-18创建