全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
29757 9
2014-07-22
悬赏 30 个论坛币 已解决
麻烦问一下大家,我有如下两个datasets

dataset 1 (master)

  year     cusip              varlist
1998    009847X2
1998     1234567
1998    0345c657
1999    009847X2
1999   1234567
1999    65789V4
...........

dataset2 (using)
  year     cusip          beta
1998   009847X2    0.5
1998   9989X34      1.2
1999   009847X2    1.3
.........


现在需要把两个datasets合并,1是master 2是using,我尝试了以下两种方法。


1.     merge 1:1 cusip year using.....
结果显示的是:variable cusip does not uniquely identify observations in the master data

2.    merge m:m cusip year using....
虽然可以合并,但是结果不对 显示如下: matched是0
Result                           # of obs.
    -----------------------------------------
    not matched                        76,869
        from master                    30,603  (_merge==1)
        from using                     46,266  (_merge==2)

    matched                                 0  (_merge==3)
    -----------------------------------------


我自己猜想的原因是:因为我merge的key variable: cusip是strl的,不是数值型的, help merge的文件中有这么一句话:Key variables cannot be strLs.  

这种问题请问该如何解决?可以把cusip更改成数值格式嘛?如果可以改如何改?因为有的公司的cusip里面是含有字母的。或者有没有其他的merge方法可以解决我的问题?麻烦大家帮帮忙哦,谢谢啦!



最佳答案

xingxf 查看完整内容

首先纠正你一个问题,"Key variables cannot be strLs" 这里的strLs是指长字符,长字符的概念是Stata 13里才出现的,你的cusip只是一般string,不是长字符,merge用一般string匹配没有问题。 其次,如果你认真读了help文档的话,有这么一句话"Use of merge m:m is not encouraged."应该说,merge m:m应该尽量避免,如果真有这种需求,最好通过joinby实现。 你做1:1匹配的时候,"variable cusip does not uniquely identify obs ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-7-22 23:59:42
首先纠正你一个问题,"Key variables cannot be strLs" 这里的strLs是指长字符,长字符的概念是Stata 13里才出现的,你的cusip只是一般string,不是长字符,merge用一般string匹配没有问题。
其次,如果你认真读了help文档的话,有这么一句话"Use of merge m:m is not encouraged."应该说,merge m:m应该尽量避免,如果真有这种需求,最好通过joinby实现。
你做1:1匹配的时候,"variable cusip does not uniquely identify observations in the master data"说明你master的数据对于cusip year组合有重复值。另外,不知道你using数据有没有重复值,你自己要再确认一下。你可以用duplicates命令处理重复值的问题。
你需要明白你的重复值是如何产生的,是需要保存的,还是需要删除的,这个决定了你要用merge还是joinby。
另外,你查一下你的cusip,cusip在许多数据库是6位的代码,在有的数据库是8位代码,8位cusip的前6位和6位cusip是一致的。你显示的cusip有7位有8位,这里肯定有问题。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-23 00:09:28
路过看看,没有找找
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-23 05:31:30
xingxf 发表于 2014-7-23 05:00
首先纠正你一个问题,"Key variables cannot be strLs" 这里的strLs是指长字符,长字符的概念是Stata 13里才 ...
谢谢你的回答哦。
master和using我都检查过了没有重复。例子中的cusip是我随便写的,但是这点提醒了我,我去看了下我的cusip 我的dataset1的数据是从WRDS compustat里面导出来的 cusip大多是九位的,也有一些是8位的。我帮dataset1的数据处理好后复制了cusip去WRDS CRSP输出相应的stock的信息保存在dataset2,但是我现在检查了dataset2的cusip全是8位的。好奇怪的现象啊。如果dataset1的cusip是错的话也不可能从CRSP中找到相应的信息呀。样本在3万多数据左右,dataset1和2大概差了1000多个没有找到。您知道我是哪里出错了吗?谢谢啦
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-23 06:34:02
xingxf 发表于 2014-7-23 05:00
首先纠正你一个问题,"Key variables cannot be strLs" 这里的strLs是指长字符,长字符的概念是Stata 13里才 ...
发现问题啦 原来要把compustat和CRSP的data进行merge需要在SAS里进行,略复杂,不能简单的在stata里用merge命里,因为两个数据库的cusip位数不同。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-7-23 07:39:06
Edgar_liu 发表于 2014-7-23 06:34
发现问题啦 原来要把compustat和CRSP的data进行merge需要在SAS里进行,略复杂,不能简单的在stata里用mer ...
对于Compustat和CRSP的整合来说,SAS里能做的,Stata里也一样能做。Compustat里的cusip是9位的,前6位和你的cusip前6位是一致的。你在WRDS里,CRSP下面可以找到CRSP Tools - Translate to PERMCO/PERMNO,可以下载不同数据库系统间的代码对应关系。对于CUSIP,PERMNO,GVKEY之间的转换,你可以参考下面的链接,当然,你仔细阅读WRDS的帮助文档也可以找到答案。
http://bizlib247.wordpress.com/2 ... cusip-permno-gvkey/
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群