cd"~/Desktop/使用 Stata 匹配工商注册信息行业与国民经济行业代码" import excel using "国民经济行业分类和代码.xlsx", clear
foreach i of varlist _all { capformat`i' %10s }
keep A-E dropin 1 gen id = _n order id gen 行业门类 = A if ustrregexm(A, "[A-Z]") order id 行业门类 gen 行业大类 = A ifstrlen(A) == 2 order id 行业门类 行业大类 gen 行业中类 = A ifstrlen(A) == 3 order id 行业门类 行业大类 行业中类 drop A ren B 行业小类 dropif !mi(C) | D == "—" carryforward 行业门类, replace bysort 行业门类: carryforward 行业大类, replace bysort 行业门类 行业大类: carryforward 行业中类, replace bysort 行业门类 行业大类 行业中类: carryforward 行业小类, replace foreach i of varlist 行业门类 行业大类 行业中类 行业小类 { replace`i' = subinstr(`i', " ", "", .) } save data1, replace
行业代码的结构是这样的:
下面我们把行业门类、大类、中类、小类分别提取出来:
*- 行业门类 use data1, clear keepif !mi(行业门类) & mi(行业大类) bysort 行业门类: keepif _n == 1 keep 行业门类 D ren 行业门类 行业门类代码 renD 行业门类 save"行业门类", replace
*- 合并 use 行业小类, clear gen 行业中类代码 = substr(行业小类代码, 1, 4) mergem:1 行业中类代码 using 行业中类 replace 行业中类 = 行业小类 if _m == 1 drop _m gen 行业大类代码 = substr(行业小类代码, 1, 3) mergem:1 行业大类代码 using 行业大类 drop _m
gen 行业门类代码 = substr(行业小类代码, 1, 1) mergem:1 行业门类代码 using 行业门类 drop _m order 行业门类代码 行业门类 行业大类代码 行业大类 行业中类代码 行业中类 行业小类代码 行业小类 label data "数据处理:微信公众号 RStata" save"国民经济行业分类和代码(GB_T4754_2017)", replace
use"1949~2023年各省市区县、行业新增企业数量统计.dta", clear keep 一级行业分类 二级行业分类 三级行业分类 duplicatesdrop 一级行业分类 二级行业分类 三级行业分类, force dropif 三级行业分类 == " " gen myid = _n order myid save 待匹配行业代码, replace
匹配两组数据
首先我们试着和行业小类匹配:
use 待匹配行业代码, clear gen 行业小类 = 三级行业分类 replace 行业小类 = "药用辅料及包装材料制造"if 行业小类 == "药用辅料及包装材料" dropif 三级行业分类 == " " merge 1:1 行业小类 using "国民经济行业分类和代码(GB_T4754_2017)"
*> Result Number of obs *> ----------------------------------------- *> Not matched 1,463 *> from master 270 (_merge==1) *> from using 1,193 (_merge==2)
use 待匹配行业代码, clear merge 1:1 myid using myid1 dropif _m == 3 drop _m gen 行业中类 = 三级行业分类 replace 行业中类 = "羽毛(绒)加工及制品制造"if 行业中类 == "羽毛(绒)加工及制品制造" merge 1:m 行业中类 using "国民经济行业分类和代码(GB_T4754_2017)" keepif _m == 3
*> Result Number of obs *> ----------------------------------------- *> Not matched 214 *> from master 0 (_merge==1) *> from using 214 (_merge==2) *> *> Matched 1,168 (_merge==3) *> -----------------------------------------
drop _merge 行业小类 行业小类代码 save 第二部分匹配成功, replace
可以看到这时候完全匹配上了。
最后合并两部分匹配结果:
use 第一部分匹配成功, clear append using 第二部分匹配成功
gsort myid drop _m compress foreach i of varlist _all { capformat`i' %10s } duplicatesdrop _all, force label data "数据处理:微信公众号 RStata" save"工商注册信息中的行业匹配国民经济行业代码", replace
评论