我正在使用 R 连接到 WRDS。现在,我想链接 compustat 和 crsp 表。在 SAS 中,这将使用宏和 CCM 链接表来实现。在 R 中处理这个主题的最佳方法是什么?
进展更新:
我从 wrds 下载了 crsp、compustat 和 ccm_link 表。
sql <- "select * from CRSP.CCMXPF_LINKTABLE"
res <- dbSendQuery(wrds, sql)
ccmxpf_linktable <- fetch(res, n = -1)
ccm.dt <- data.table(ccmxpf_linktable)
rm(ccmxpf_linktable)
然后,我将建议的匹配例程从 wrds 事件研究 sas 文件转换为 R:
ccm.dt[,typeflag:=linktype %in% c("LU","LC","LD","LN","LS","LX") & USEDFLAG=="1"]
setkey(ccm.dt, gvkey, typeflag)
for (i in 1:nrow(compu.dt)) {
gvkey.comp = compu.dt[i, gvkey]
endfyr.comp = compu.dt[i,endfyr]
PERMNO.val <- ccm.dt[.(gvkey.comp, TRUE),][linkdt<=endfyr.comp & endfyr.comp<=linkenddt,lpermno]
if (length(PERMNO.val)==0) PERMNO.val <- NA
suppressWarnings(compu.dt[i, "PERMNO"] <- PERMNO.val)
}
然而,这段代码效率极低。我从 data.table 开始,但并不真正了解如何在 for 循环中应用逻辑。我希望有人能指出如何改进 for 循环的方法。