之前给大家分享了一些关于工企数据库和其它的数据库匹配的结果。
由于使用的工企数据分成两个部分:1998~2013 年和 2014 年,其中 1998~2013 年的数据里面有组织机构代码、企业名称和企业匹配唯一标志码,而 2014 年的数据有企业名称、组织机构代码,但是没有企业匹配唯一标志码,所以不是很容易把两份数据合并成一个面板使用。
所以今天就介绍一下如何仿照 Brandt 方法把 2014 年的数据匹配到 1998~2013 年上并最终合并生成一个面板。
Brandt 方法的原始 do 代码可以从这里下载到:https://feb.kuleuven.be/public/u0044468/CHINA/appendix/
大致匹配方法是:
- Match by firm ID:根据组织机构代码进行匹配;
- Match by firm names:根据企业名称进行匹配;
- Match by the names of legal person representatives:根据法人代表名称进行匹配;
- Match by phone number + city code:根据电话号码 + 行政区划代码进行匹配;
- Match by code = founding year + geographic code + industry code + name of town + name of main product:根据成立年份 + 区划代码 + 行业代码 + 所处区县 + 主营业务进行匹配。
采用类似的思想,我们可以使用下面的标准把 2014 年的数据和之前的年份进行匹配:
- 根据组织机构代码匹配;
- 根据企业名称匹配;
- 根据法人代表姓名+行政区划+成立年份匹配(这里的逻辑是一个人在某个区县一年基本上只会成立一家公司);
- 根据电话号码+行政区划+成立年份匹配(这里的逻辑是同一个区县电话号码相同、成立年份也相同的只会是一家公司);
- 按照成立年份+省地县码+行业代码+县的名字+主营业务匹配(逻辑类似)。
实际上这里我们不需要用到任何匹配命令,直接使用上面的规则对 2014 年的企业匹配唯一标志码进行填补缺失值即可。下面我们来用 Stata 操作下:
首先合并 1998~2013 年的数据:
cd "~/Desktop/工企数据合并1998~2014" |
由于数据太大,仅仅保留需要的变量:
use gq9813, clear |
同样,2014 年的数据也仅仅保留这些变量:
use 2014gq, clear |
然后我们把 gq9813sim 和 2014gqsim 合并起来:
use gq9813sim, clear |
结果报错了,报错信息:
variable 开业成立时间年 is int in master but str11 in using data |
也就是说 开业成立时间年 这个变量在 gq9813sim 数据里面是 int 型的,但是在 2014gqsim 里面是 str11(字符串)型的,所以我们需要提前把两个处理成一致的:
use gq9813sim, clear |
使用 compress 命令可以压缩数据节省内存:
compress |
由于主要业务活动或主要产品1变量中存着很多看起来是空的字符,可以用下面的代码删除掉:
replace 主要业务活动或主要产品1 = subinstr(主要业务活动或主要产品1, " ", "", .) |
这个时候我们就把 2014 年的数据和 98~13 年的数据 append 起来了,由于 98~13 年的数据里面有企业匹配唯一标志码变量、2014 年的没有,所以 append 之后的数据里面 2014 年的企业匹配唯一标志码变量是缺失的,下面我们就根据前面预想的五步规则进行填补。
首先查看 企业匹配唯一标识码 缺失的观测值数:
count if missing(企业匹配唯一标识码) |
这就是 2014 年的观测值数量,然后开始填补:
* 根据组织机构代码填补 企业匹配唯一标识码 |
填补之后还有这么多缺失的:
count if missing(企业匹配唯一标识码) |
剩余的企业匹配唯一标识码没有填补成功的视为新企业,可以用 gqid 临时填充一下:
tostring gqid, gen(sgqid) format(%10.0f) force |
然后我们就可以根据企业匹配唯一标识码变量生成个体 id 了:
egen group = group(企业匹配唯一标识码) |
工企数据里面一共出现了 1075124 个企业:
unique group |
这样就匹配得到了 1998~2014 年的工企面板数据。
点击这里跳转到 RStata 短书平台获取附件:如何仿照 Brandt 方法把工企数据匹配成面板?
评论