如何合并Compustat年度数据和CRSP每日数据,并考虑不同的会计年度开始和结束

时间:2019-05-18 21:27:32

标签: r

感谢您在我为自己的论文试图解决的挑战中所提供的帮助。我有两组数据,一组来自CRSP,包含月度股票收益数据,另一组包含我要合并的Compustat年度数据。我有一个唯一的标识符(permno)和日期变量,使合并成为可能,但我的问题是在Compustat中,我的数据集中的公司在不同点(例如,从一月到十二月,从三月到二月等)开始和结束会计年度)。

我的目标是在将每月CRSP数据与Compustat年份数据合并时使其与正确的会计年度匹配。

Compustat数据列数据日期表示公司会计年度结束的月份和年份。因此,如果一个固定的会计年度在2​​001年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创建

0 个答案:

没有答案