首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过WRDS链接R中的crsp和compustat

通过WRDS链接R中的crsp和compustat
EN

Stack Overflow用户
提问于 2016-01-16 08:35:46
回答 1查看 1.6K关注 0票数 0

我正在使用R连接到WRDS。现在,我想链接compustat和crsp表。在SAS中,这将使用宏和CCM链接表来实现。在R中处理这个主题的最好方法是什么?

进度更新:

我从wrds下载了crsp,compustat和ccm_link表。

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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循环的方法。

EN

回答 1

Stack Overflow用户

发布于 2016-01-17 07:15:26

在阶段中匹配字段效果更好。也许有人会觉得这很有用。当然,我们非常欢迎任何关于进一步改进的建议!

代码语言:javascript
运行
复制
# filter on ccm.dt
ccm.dt <- ccm.dt[linktype %in% c("LU","LC","LD","LN","LS","LX") & USEDFLAG=="1"]
setkey(ccm.dt, gvkey)
setkey(compu.dt, gvkey)
compu.merged <- merge(compu.dt, ccm.dt, all.x = TRUE, allow.cartesian = TRUE)
# deal with NAs in linkenddt - set NAs to todays date, assuming they still exist.
today <- as.character(Sys.Date())
compu.merged[is.na(linkenddt), "linkenddt":=today]
# filter out date mismatches
compu <- compu.merged[linkdt <= endfyr & endfyr<=linkenddt]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34822178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档