请选择 进入手机版 | 继续访问电脑版
按年份索引
按国、省、市索引
综合索引
-->
返回列表
提升主题| 本版置顶| 关闭主题| 变更主题颜色| 抢沙发| 顶贴| 显身卡| 道具中心
楼主: liuyangclick
26793 53

[数据软件处理] 小白VS中国工业企业数据库(4):相邻两年间的匹配   [推广有奖]

博士生

50%

还不是VIP/贵宾

-

威望
0
论坛币
11687 个
通用积分
89.2317
学术水平
66 点
热心指数
73 点
信用等级
59 点
经验
4683 点
帖子
173
精华
0
在线时间
387 小时
注册时间
2007-6-3
最后登录
2024-2-5

liuyangclick 学生认证  发表于 2017-8-10 18:35:59 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
    生成各年年内匹配完毕的mi.dta数据文件后,就可以进行相邻两年间的样本匹配了。    这么做的目的是,我们需要的是一个拥有企业识别码和年份的面板数据,但中国工业企业数据库中,法人代码和工商注册号均有重复的数值,不能作为唯一的企业识别码。另外,企业改制,改名和在不同地区之间迁徙也导致这一问题非常复杂,因此在没有只能模糊识别技术前提下,BRANDT采用的是贯序识别匹配法,做法原理是:现根据相同的法人代码识别同一家企业,然后根据企业名称再进行识别,最后根据法人、行政区码和乡镇等信息进行识别配。其进行相邻两年间的识别匹配程序为:

forval i =1998/2007{  
    use m`i'.dta,clear  
*将ID中的字母都变成大写的:
    replace id`i' = strupper(id`i')  
    compress  
    saveold m`i'.10.dta,replace  
}  
forval i =1998/2007{  
    use m`i'.10.dta,clear  
    des,short  
}  
forval i = 1998/2006{  
*设i为当年,j为下一年:
    local j = `i'+1   


**Step 10  首先根据法人代码(firm_id/id)进行匹配,分离出id重复的样本:  


    disp "Step 10 "  
    use m`i'.10.dta,clear  
*保留ID重复的样本:
    bysort id`i': keep if _N>1  
    compress  
*将重复样本保存为duplicates_ID`i'.dta:
    saveold duplicates_ID`i'.dta,replace  

    use m`i'.10.dta,clear  
    bysort id`i': drop if _N>1  
    rename id`i' id  
    sort id  
    keep *`i' id  
    compress  
*将匹配成功的保存为match`i'.1.dta:
    saveold match`i'.1.dta,replace  

*处理下一年的数据,方法跟上面一样:  
    use m`j'.10.dta,clear  
    bysort id`j': keep if _N>1  
    compress  
*保存重复ID的样本:
    saveold duplicates_ID`j'.dta,replace  

    use m`j'.10.dta,clear  
    bysort id`j': drop if _N>1  
    rename id`j' id  
    keep *`j' id  
    sort id  
    compress  
*保存匹配成功的样本:
    saveold match`j'.1.dta,replace  

    use match`i'.1.dta,clear  
    merge 1:1 id using match`j'.1.dta  
    keep if _m==3  
    gen id`i' = id  
    rename id id`j'  
    drop _merge  
*为了方便后面的识别,需要将匹配成功的样本生成匹配方法和匹配结果两个变量(1为i年未匹配成功;2为j年未匹配成功;3为匹配成功):
    gen match_method_`i'_`j'="ID"  
    gen match_status_`i'_`j'="3"  
    compress  
*相邻两年以ID匹配成功的样本保存为matched_by_ID`i'_`j'.dta:
    saveold matched_by_ID`i'_`j'.dta,replace  

**Step 20   将未能用ID匹配成功的样本以企业名称(firm_name/name)进行匹配:

    disp "Step 20 "   
    use match`i'.1.dta,clear  
    merge 1:1 id using match`j'.1.dta
*保留i年未匹配成功样本:  
    keep if _m==1  
    rename id id`i'  
*合并ID重复的样本:
    append using duplicates_ID`i'.dta  
    bysort name`i': keep if _N>1  
    keep *`i'  
    compress  
*保存为duplicates_name`i'.dta:
    saveold duplicates_name`i'.dta,replace  

    use match`i'.1.dta,clear  
    merge 1:1 id using match`j'.1.dta  
    keep if _m==1  
    rename id id`i'  
    append using duplicates_ID`i'.dta  
    bysort name`i': drop if _N>1  
    rename name`i' name  
    sort name  
    keep *`i' name  
    compress  
    saveold unmatched_by_ID`i'.dta,replace  

    use match`i'.1.dta,clear  
    merge 1:1 id using match`j'.1.dta  
    keep if _m==2  
    rename id id`j'  
    append using duplicates_ID`j'.dta  
    bysort name`j': keep if _N>1  
    keep *`j'  
    compress  
    saveold duplicates_name`j'.dta,replace   

    use match`i'.1.dta,clear  
    merge 1:1 id using match`j'.1.dta  
    keep if _m==2  
    rename id id`j'  
    append using duplicates_ID`j'.dta  
    bysort name`j': drop if _N>1  
    rename name`j' name  
    sort name  
    keep *`j' name  
    compress  
    saveold unmatched_by_ID`j'.dta,replace  

    use unmatched_by_ID`i'.dta,clear  
    merge 1:1 name using unmatched_by_ID`j'.dta  
    keep if _m==3  
    gen name`i' = name  
    rename name name`j'  
    drop _m  
    gen match_method_`i'_`j'="firm name"  
    gen match_status_`i'_`j'="3"  
    compress  
    saveold matched_by_name`i'_`j'.dta,replace  

**Step 30  未能以企业名称匹配成功的,再以法人(legal_person)+地区码(region_code/dq)进行匹配,当然大家还可以修改为其他匹配变量,例如邮编、传真等:


    disp "Step 30 "  
    use unmatched_by_ID`i'.dta,clear  
    merge 1:1 name using unmatched_by_ID`j'.dta  
    keep if _m == 1  
    rename name name`i'  
    append using duplicates_name`i'.dta  
    replace legal_person`i' = "." if legal_person`i' == ""  
    gen code1 = legal_person`i' + substr(dq`i',1,4)  
    bysort code1: keep if _N>1  
    keep *`i'   
    compress  
    saveold duplicates_code1_`i'.dta,replace  

    use unmatched_by_ID`i'.dta,clear  
    merge 1:1 name using unmatched_by_ID`j'.dta  
    keep if _m == 1  
    rename name name`i'  
    append using duplicates_name`i'.dta  
    replace legal_person`i' = "." if legal_person`i' == ""  
    gen code1 = legal_person`i' + substr(dq`i',1,4)  
    bysort code1: drop if _N>1  
    sort code1  
    keep code1 *`i'  
    compress  
    saveold unmatched_by_ID_and_name`i'.dta,replace  

    use unmatched_by_ID`i'.dta,clear  
    merge 1:1 name using unmatched_by_ID`j'.dta  
    keep if _m == 2  
    rename name name`j'  
    append using duplicates_name`j'.dta  
*   replace legal_person`j' = "." if legal_person`j' == ""  
    gen code1 = legal_person`j' + substr(dq`j',1,4)  
    bysort code1: keep if _N>1  
    keep *`j'   
    compress  
    saveold duplicates_code1_`j'.dta,replace      

    use unmatched_by_ID`i'.dta,clear  
    merge 1:1 name using unmatched_by_ID`j'.dta  
    keep if _m == 2  
    rename name name`j'  
    append using duplicates_name`j'.dta  
*   replace legal_person`j' = "." if legal_person`j' == ""  
    gen code1 = legal_person`j' + substr(dq`j',1,4)  
    bysort code1: drop if _N>1  
    sort code1  
    keep code1 *`j'  
    compress  
    saveold unmatched_by_ID_and_name`j'.dta,replace  

    use unmatched_by_ID_and_name`i'.dta,clear  
    disp _N  
    merge 1:1 code1 using unmatched_by_ID_and_name`j'.dta  
    keep if _m==3  
    drop _m code1  
    gen match_method_`i'_`j' = "legal_person"  
    gen match_status_`i'_`j' = "3"  
    compress  
    saveold matched_by_legalperson`i'_`j'.dta,replace  

**Step 40  上两步未匹配成功的再以电话(phone)+地区码(dq)+行业代码(cic)进行匹配:


    disp "Step 40 "   
    use unmatched_by_ID_and_name`i'.dta,clear  
    merge 1:1 code1 using unmatched_by_ID_and_name`j'.dta  
    keep if _m==1  
    drop code1  
    append using duplicates_code1_`i'.dta  
    replace phone`i' = "." if phone`i' == ""  
    gen code2 = substr(dq`i',1,4)+substr(cic`i',1,3)+phone`i'  
    bysort code2 : keep if _N>1  
    keep *`i'  
    compress  
    saveold duplicates_code2_`i'.dta,replace  

    use unmatched_by_ID_and_name`i'.dta,clear  
    merge 1:1 code1 using unmatched_by_ID_and_name`j'.dta  
    keep if _m==1  
    drop code1  
    append using duplicates_code1_`i'.dta  
    replace phone`i' = "." if phone`i' == ""  
    gen code2 = substr(dq`i',1,4)+substr(cic`i',1,3)+phone`i'  
    bysort code2 : drop if _N>1  
    keep code2 *`i'  
    sort code2  
    compress  
    saveold unmatched_by_ID_and_name_and_legalperson`i'.dta,replace   

    use unmatched_by_ID_and_name`i'.dta,clear  
    merge 1:1 code1 using unmatched_by_ID_and_name`j'.dta  
    keep if _m==2  
    drop code1  
    append using duplicates_code1_`j'.dta  
*   replace phone`j' = "." if phone`j' == ""  
    gen code2 = substr(dq`j',1,4)+substr(cic`j',1,3)+phone`j'  
    bysort code2 : keep if _N>1  
    keep *`j'  
    compress  
    saveold duplicates_code2_`j'.dta,replace      

    use unmatched_by_ID_and_name`i'.dta,clear  
    merge 1:1 code1 using unmatched_by_ID_and_name`j'.dta  
    keep if _m==2  
    drop code1  
    append using duplicates_code1_`j'.dta  
*   replace phone`j' = "." if phone`j' == ""  
    gen code2 = substr(dq`j',1,4)+substr(cic`j',1,3)+phone`j'  
    bysort code2 : drop if _N>1  
    sort code2  
    keep code2 *`j'  
    compress  
    saveold unmatched_by_ID_and_name_and_legalperson`j'.dta,replace      

    use unmatched_by_ID_and_name_and_legalperson`i'.dta,clear  
    merge 1:1 code2 using unmatched_by_ID_and_name_and_legalperson`j'.dta  
    keep if _m==3  
    drop _m code2  
    gen match_method_`i'_`j' = "phone number"  
    gen match_status_`i'_`j' = "3"  
    compress  
    saveold matched_by_phone`i'_`j'.dta,replace  

**Step 50  以上没有匹配成功的再以开业年(bdat)+地区代码(dq)+行业代码(cic)+乡镇(town)+产品1(product1)进行匹配:


    disp "Step 50 "   
    use unmatched_by_ID_and_name_and_legalperson`i'.dta,clear  
    merge 1:1 code2 using unmatched_by_ID_and_name_and_legalperson`j'.dta  
    keep if _m==1  
    drop code2  
    append using duplicates_code2_`i'.dta  
    replace town`i' = "." if town`i' == ""  
    replace product1_`i' = "." if product1_`i' == ""  
    gen code3 = string(bdat`i')+substr(dq`i',1,4)+substr(cic`i',1,3)+town`i'+product1_`i'  
    bysort code3: keep if _N>1  
    keep *`i'  
    compress  
    saveold duplicates_code3_`i'.dta,replace  

    use unmatched_by_ID_and_name_and_legalperson`i'.dta,clear  
    merge 1:1 code2 using unmatched_by_ID_and_name_and_legalperson`j'.dta  
    keep if _m==1  
    drop code2  
    append using duplicates_code2_`i'.dta  
    replace town`i' = "." if town`i' == ""  
    replace product1_`i' = "." if product1_`i' == ""  
    gen code3 = string(bdat`i')+substr(dq`i',1,4)+substr(cic`i',1,3)+town`i'+product1_`i'  
    bysort code3: drop if _N>1  
    sort code3  
    keep code3 *`i'  
    compress  
    saveold unmatched_by_ID_and_name_and_legalperson_and_phone_`i'.dta,replace  

    use unmatched_by_ID_and_name_and_legalperson`i'.dta,clear  
    merge 1:1 code2 using unmatched_by_ID_and_name_and_legalperson`j'.dta  
    keep if _m==2  
    drop code2  
    append using duplicates_code2_`j'.dta  
*   replace town`j' = "." if town`j' == ""  
    replace product1_`j' = "." if product1_`j' == ""  
    gen code3 = string(bdat`j')+substr(dq`j',1,4)+substr(cic`j',1,3)+town`j'+product1_`j'  
    bysort code3: keep if _N>1  
    keep *`j'  
    compress  
    saveold duplicates_code3_`j'.dta,replace  

    use unmatched_by_ID_and_name_and_legalperson`i'.dta,clear  
    merge 1:1 code2 using unmatched_by_ID_and_name_and_legalperson`j'.dta  
    keep if _m==2  
    drop code2  
    append using duplicates_code2_`j'.dta  
*   replace town`j' = "." if town`j' == ""  
    replace product1_`j' = "." if product1_`j' == ""  
    gen code3 = string(bdat`j')+substr(dq`j',1,4)+substr(cic`j',1,3)+town`j'+product1_`j'  
    bysort code3: drop if _N>1  
    sort code3  
    keep code3 *`j'  
    compress  
    saveold unmatched_by_ID_and_name_and_legalperson_and_phone_`j'.dta,replace  

    use unmatched_by_ID_and_name_and_legalperson_and_phone_`i'.dta,clear  
    disp _N  
    merge 1:1 code3 using unmatched_by_ID_and_name_and_legalperson_and_phone_`j'.dta  
    keep if _m==3  
    drop _m code3  
    gen match_method_`i'_`j' = "code 3"  
    gen match_status_`i'_`j' = "3"  
    compress  
    saveold matched_by_code3_`i'_`j'.dta,replace  

    use unmatched_by_ID_and_name_and_legalperson_and_phone_`i'.dta,clear  
    merge 1:1 code3 using unmatched_by_ID_and_name_and_legalperson_and_phone_`j'.dta  
    keep if _m == 1  
    drop _m code3  
    append using duplicates_code3_`i'.dta  
    gen match_method_`i'_`j' = ""  
    gen match_status_`i'_`j' = "1"  
    compress  
    saveold unmatched_by_ID_and_name_and_legalperson_and_phone_and_code2`i'.dta,replace  

    use unmatched_by_ID_and_name_and_legalperson_and_phone_`i'.dta,clear  
    merge 1:1 code3 using unmatched_by_ID_and_name_and_legalperson_and_phone_`j'.dta  
    keep if _m == 2  
    drop _m code3  
    append using duplicates_code3_`j'.dta  
    gen match_method_`i'_`j' = ""  
    gen match_status_`i'_`j' = "2"  
    compress  
    saveold unmatched_by_ID_and_name_and_legalperson_and_phone_and_code2`j'.dta,replace  

**Step 60  将匹配成功的和未最终匹配成功的样本重新合并成一个m`i'-m`j'.dta文件用于下一步的匹配:


    disp "Step 60 "   
    use matched_by_ID`i'_`j'.dta,clear  
    append using matched_by_name`i'_`j'.dta  
    append using matched_by_legalperson`i'_`j'.dta  
    append using matched_by_phone`i'_`j'.dta  
    append using matched_by_code3_`i'_`j'.dta  
    append using unmatched_by_ID_and_name_and_legalperson_and_phone_and_code2`i'.dta  
    append using unmatched_by_ID_and_name_and_legalperson_and_phone_and_code2`j'.dta      
    compress  
    saveold m`i'-m`j'.dta,replace     
}  
forval i = 1998/2006{  
    local j = `i'+1  
    use m`i'-m`j'.dta,clear  
*相邻两年的样本匹配最重要的结果是生产匹配方法(match_method_`i'_`j')和匹配结果(match_status_`i'_`j')这两个变量:
    tab match_method_`i'_`j'  
    tab match_status_`i'_`j'  
}  


    匹配方法和匹配结果这两个变量是进行下一步——三个年份间匹配的关键。

二维码

扫码加我 拉你入群

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

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

关键词:中国工业企业数据库 工业企业数据库 工业企业数 中国工业 企业数据

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
guancy + 5 + 5 + 5 精彩帖子
happy_287422301 + 100 + 100 + 3 + 3 热心帮助其他会员
日新少年 + 2 + 2 + 2 精彩帖子

总评分: 经验 + 100  论坛币 + 100  学术水平 + 10  热心指数 + 10  信用等级 + 7   查看全部评分

本帖被以下文库推荐

依旧执着,但已渐淡如烟。
liuyangclick 学生认证  发表于 2017-8-10 18:39:12 |显示全部楼层 |坛友微信交流群
这是相邻两年匹配的流程图,可以更加清晰的看到数据处理流程。
相邻两年匹配流程图.jpg
已有 6 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
八七七 + 1 + 1 + 1 精彩帖子
115861 + 5 + 3 + 3 精彩帖子
chenvitor + 3 + 3 + 3 精彩帖子
猫小小siyu + 1 + 1 + 1 热心帮助其他会员
苛苛2011 + 1 + 1 + 1 精彩帖子
happy_287422301 + 100 + 3 对论坛有贡献

总评分: 论坛币 + 105  学术水平 + 9  热心指数 + 12  信用等级 + 6   查看全部评分

使用道具

西门高 发表于 2017-8-10 18:56:55 |显示全部楼层 |坛友微信交流群
谢谢分享

使用道具

bzq198786 发表于 2017-8-10 19:32:39 |显示全部楼层 |坛友微信交流群
谢谢分享

使用道具

日新少年 学生认证  发表于 2017-9-13 08:54:47 |显示全部楼层 |坛友微信交流群

谢谢分享

使用道具

壹心 发表于 2018-2-5 21:46:35 |显示全部楼层 |坛友微信交流群
谢谢分享,很棒

使用道具

谢谢楼主分享,厉害

使用道具

能帮忙看一下什么情况吗
搜狗截图18年03月02日2110_1.png
搜狗截图18年03月02日2110_1.png
已有 1 人评分论坛币 收起 理由
happy_287422301 + 40 鼓励积极发帖讨论

总评分: 论坛币 + 40   查看全部评分

使用道具

哎呀呀中国结 发表于 2018-3-2 21:14
能帮忙看一下什么情况吗
你这个是数据类型不一样吧
已有 1 人评分经验 论坛币 热心指数 收起 理由
happy_287422301 + 100 + 99 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 99  热心指数 + 1   查看全部评分

使用道具

happy_287422301 在职认证  发表于 2018-4-1 22:21:11 |显示全部楼层 |坛友微信交流群
很好的帖子呀,要给楼主适当的奖励才对!

使用道具

返回列表
您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 01:41