目标:把公司的数据和到一张表上
我在国泰安上下载了A股上市公司2008-2016年的某些数据,要做描述性统计和相关性分析,但数据合并对我来说是个问题。先后尝试了excel的vlookup函数,奈何自己技术不过关,数据量又大(1.9万条),过程中excel容易卡,匹配结果大部分为空,当时什么都不会,有点想人工匹配了,迷之工作量。因为一些原因,我这一学期才接触数据库,技术也不行,给同组同学诉苦,他说,可以用数据库帮我合并,几条语句,很快。
没过一会儿,他就合并好,发给了我。我真的万分感谢,觉得离作业完成只差一步之遥,数据全有了,只差计算了。并感叹数据库的神奇,暗下决心好好学习数据库!
过来一段时间,我计算指标时,发现里面缺了几年的数据,但里面已经有2.7万条数据。在合并过程中,有很多重复数据(例如,某几个个案,里面仅有1,2个不同的属性)。我刚学习了左外连接,让他帮我左外连接的,他说,左外连接的结果很奇怪,会出现很多奇怪的东西。我怕数据量暴增,就重新跟他交代了每张表之间数据匹配的依据,结果出来的数据还是少了几年的,导致里面一个指标无法计算。转机
在第二天课中,偶然发现stata可以做纵向和横向数据匹配,并询问了老师,她给我说,一对一,多对多,1对多(在横向数据匹配中),我后来查询了,但不是很清楚。就直接用代码上手了(参考的stata教程是人大刘传波老师的书),测试数据很成功,感叹轻便的stata如此好用!(测试过程在merge后面直接加了两个匹配依据,就是他们两个合在一起和本数据对应的上时,才把属性和数据内容放到右边)示例代码
use 利润表.dta,clear
sort 证券代码 会计期间
save 利润表.dta,replace //排好序的数据替换原来的数据
use 资产负债表.dta,clear
sort 证券代码 会计期间
save 资产负债表.dta,replace
merge 证券代码 会计期间 using 利润表
tab _merge //显示对接情况,3 表示成功对接, 1 和 2 表示未成功对接
//本次结果显示全部为3,就是都完全匹配,所以可以直接删除_merge
drop _merge
save 利润表和资产负债表.dta
代码大概就这样,记得两个表的排序都要做,特别是“母”表的排序千万不要省略,我之前以为在上一次合并中已按照这两个属性排好序了,就不用再排了,可程序报错了。
稍微解释一下关联的两个属性,也就是merge后面的“证券代码”和“会计期间”。如果熟悉国泰安数据库,会对这两个变量比较敏感,“证券代码”代表公司;“会计期间”代表统计的时间,对于财务指标的话,按季度统计的,所以要想唯一确定某个个案,就要看这两个属性值,类似于数据库中的主键。