全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管文库(原现金交易版)
267 0
2024-12-17

合并 1998~2013 年的工企数据库

如果直接把 1998~2013 年的工企数据库合并起来,会得到一个超过 15GB 的文件,很多小伙伴的电脑无法读取(意味着电脑至少需要 16GB 的内存才能勉强读取)。所以建议大家先逐个读取分年的数据提取自己需要的变量保存再合并。因为我的电脑内存比较大,所以我就直把 1998~2013 年的工企数据库合并起来了:


* 合并工企数据库
use 1998gq.dta, clear
forval i = 1999/2013 {
        append using "`i'gq"
}
save "工企数据库", replace

工企数据库里面的企业名称和组织机构代码存在诸多问题,我编写了一个 do 文件专门解决这个问题,直接运行下面的代码即可:

use 工企数据库, clear
do 企业名称处理.do

当然运行前需要把 企业名称处理.do 文件放置到你的工作目录下面。这个文件的内容大概是下面这样的:

3.png


另外在下载到的工企数据库里面我提前生成了一个 gqid 变量,用以标志观测值,下面我们仅保留匹配所需的变量:

keep 年份 组织机构代码 企业名称 gqid
replace 组织机构代码 = strlower(组织机构代码)
save gqid, replace

另外因为污染库的组织机构代码变量以及给我做过小写化的处理了,所以这里工企库的组织机构代码也需要小写化处理。

这里 gqid 变量的作用就是等下匹配结束之后我们可以使用这个变量再与原始的工企数据库匹配(因为这里我们删除了工企数据库的大部分变量)。


处理企业污染库

平台上的企业污染库提供的是 1998~2014 年的,我们先提取出来 1998~2013 年的:

use "1998~2014年企业污染库.dta", clear
do 企业名称处理.do
drop if 年份 == 2014
save wrid, replace

工企与污染库匹配第一步:使用组织机构代码匹配

我们需要先删除组织机构代码缺失的:

use wrid, clear
drop if missing(组织机构代码)
save wrid1, replace

use gqid, clear
drop if missing(组织机构代码)
ren 企业名称 企业名称2
save gqid1, replace

然后再匹配:

use wrid1, clear
replace 组织机构代码 = subinstr(组织机构代码, "-", "", .)
replace 组织机构代码 = ustrregexs(1) if ustrregexm(组织机构代码, "(.*)\(")
merge m:m 年份 组织机构代码 using gqid1
keep if _m == 3
drop _m
foreach i of varlist _all {
        cap format `i' %10s
}
drop 企业名称2
save res1, replace

这里代码的二三行又对组织机构代码进行了处理,这是因为匹配的时候发现之前我忘记对 2012 年污染库的组织机构代码进行处理了。

这里匹配我使用的是 m:m 多对多匹配,计划等匹配完成之后再删除重复值。


第二步:使用企业名称匹配

根据我以往的匹配经验,去除掉企业名称中对匹配没有帮助的词汇会有利于提高匹配率:

use wrid, clear
drop if missing(企业名称)
replace 企业名称 = subinstr(企业名称, "股份有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "集团有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限责任公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限公司", "", .)
replace 企业名称 = subinstr(企业名称, " ", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
save wrid2, replace

use gqid, clear
drop if missing(企业名称)
replace 企业名称 = subinstr(企业名称, "股份有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "集团有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限责任公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限公司", "", .)
replace 企业名称 = subinstr(企业名称, " ", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
ren 组织机构代码 组织机构代码2
save gqid2, replace

use wrid2, clear
merge m:m 年份 企业名称 using gqid2
keep if _m == 3
drop _m
foreach i of varlist _all {
        cap format `i' %10s
}
tab 年份
drop 组织机构代码2
save res2, replace


第三步:合并两部分匹配结果去除重复匹配的:

理论上,每个 gqid 、每个 wrid 应该只对应一个观测值,为了避免歧义,我删除了 gqid wrid 都重复的(只保留一组,这个重复主要是因为两种匹配方式产生的),另外还删除了 gdid 和 wrid 分别存在重复的(直接删除没有任何保留,因为这个重复往往是因为数据有问题(某个工企数据库的观测值匹配到了多个污染库的观测值或者某个污染库的观测值匹配到了多个工企库的观测值))

use res1, clear
append using res2
order *id
duplicates drop gqid wrid, force
duplicates tag gqid, gen(tags)
drop if tags != 0
drop tags
duplicates tag wrid, gen(tags)
drop if tags != 0
drop tags
tab 年份
* 再和工企数据匹配
drop 年份
drop 组织机构代码
drop 企业名称
merge 1:1 gqid using 工企数据库.dta
keep if _m == 3
drop _m
order *id 组织机构代码 企业名称 年份
compress
foreach i of varlist _all {
        cap format `i' %10s
}
save "1998~2013年工企数据库与企业污染数据库匹配结果", replace
1.png


2014 年的数据匹配

很多人觉得 2014 年的数据不靠谱,作为参考我也匹配一份分享给大家(使用的工企数据库是 30 万观测值版本的,有企业名称和组织机构代码),匹配方法和上面的类似:

* 2014 年的数据匹配
use "1998~2014年企业污染库.dta", clear
keep if 年份 == 2014
do 企业名称处理.do
save wr2014id, replace

* 使用组织机构代码匹配
use wr2014id, clear
drop if missing(组织机构代码)
save wr2014id1, replace

use 2014gq, clear
drop if missing(组织机构代码)
ren 企业名称 企业名称2
save gq2014id1, replace

use wr2014id1, clear
merge m:m 年份 组织机构代码 using gq2014id1
keep if _m == 3
drop _m
foreach i of varlist _all {
        cap format `i' %10s
}
drop 企业名称2
save 2014res1, replace

* 使用企业名称匹配
use wr2014id, clear
drop if missing(企业名称)
replace 企业名称 = subinstr(企业名称, "股份有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "集团有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限责任公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限公司", "", .)
replace 企业名称 = subinstr(企业名称, " ", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
save wr2014id2, replace

use 2014gq, clear
drop if missing(企业名称)
replace 企业名称 = subinstr(企业名称, "股份有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "集团有限公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限责任公司", "", .)
replace 企业名称 = subinstr(企业名称, "有限公司", "", .)
replace 企业名称 = subinstr(企业名称, " ", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(集团)", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
replace 企业名称 = subinstr(企业名称, "(", "", .)
replace 企业名称 = subinstr(企业名称, ")", "", .)
ren 组织机构代码 组织机构代码2
save gq2014id2, replace

use wr2014id2, clear
merge m:m 年份 企业名称 using gq2014id2
keep if _m == 3
drop _m
foreach i of varlist _all {
        cap format `i' %10s
}
tab 年份
drop 组织机构代码2
save 2014res2, replace

use 2014res1, clear
append using 2014res2
order *id
duplicates drop gqid wrid, force
duplicates tag gqid, gen(tags)
drop if tags != 0
drop tags
duplicates tag wrid, gen(tags)
drop if tags != 0
drop tags
* 再和工企数据匹配
drop 年份
drop 组织机构代码
drop 企业名称
merge 1:1 gqid using 2014gq
keep if _m == 3
drop _m
order *id 组织机构代码 企业名称 年份
compress
foreach i of varlist _all {
        cap format `i' %10s
}
save "2014年工企数据库与企业污染数据库匹配结果", replace

最后因为 2014 年数据里面包含了一些完全缺失的变量(这些变量实际上是其它年份有而 2014 年没有的),我们找到他们并删除:

* 删除掉完全缺失的变量
use "2014年工企数据库与企业污染数据库匹配结果", clear
foreach i of varlist _all {
        count if missing(`i')
        if r(N) == `=_N' {
                drop `i'
        }
}
save "2014年工企数据库与企业污染数据库匹配结果", replace
2.png


各年匹配得到的观测值数量如下表所示:


年份

匹配使用的工企库观测值数量

匹配数量

1998

165115

24802

1999

162022

29459

2000

162872

31127

2001

171254

31281

2002

181542

31661

2003

196206

32225

2004

279011

38242

2005

270023

38155

2006

301930

40755

2007

336732

51942

2008

412212

50177

2009

366130

46180

2010

442539

55972

2011

302593

63119

2012

324604

64711

2013

344875

65027

2014

309138

51012


result.png


二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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