不同数据库的企业数据怎么匹配
把“工商注册库 + 专利库 + 海关库 + 招投标库”等不同来源的企业拼成一张宽表,核心就两步:“先标准化,再连键”。下面给出一条可直接落地的 Stata 流水线,兼顾精度与速度;Python/Pandas 方案附在文末,思路完全一致。
一、事前准备:统一“企业标识键”
- 统一社会信用代码(USCC)
- 18 位,全国唯一,优先级最高;只要两边都有,直接 1:1 merge。
 
- 注册号 / 工商号
- 老数据可能是 15 位注册号,用官方对照表先转成 USCC;转换表可在国家企业信用信息公示系统批量下载。
 
- 企业名称
- 去掉“有限公司”“股份有限公司”“集团”等后缀,全角半角、大小写、空格统一;生成一个“名称_纯净”字段。
 
- 法人姓名 + 成立日期
- 当 USCC 缺失、名称高度相似时,用“法人+成立日期”做二次确认,防止同名异企。
 
二、Stata 实操模板(三阶段)
* 0 安装辅助命令
ssc install strgroup, replace
ssc install reclink2, replace
* 1 读入 A、B 两库,先生成纯净名称
foreach db in A B {
    use `db', clear
    gen name_clean = ustrtrim(ustrlower(企业名称))           // 大小写+空格
    gen name_pure  = regexr(name_clean, "(股份|有限|集团|责任|公司|co\.|ltd\.|inc\.)", "")
    save `db'_clean, replace
}
* 2 一级匹配:USCC 精确
use A_clean, clear
merge 1:1 uscc using B_clean, keep(match master) gen(m1)
save match1, replace
* 3 二级匹配:模糊名称(Jaro-Winkler > 0.92)
use A_clean, clear
reclink2 name_pure 省份 成立年 using B_clean,            ///
        idmaster(idA) idusing(idB) gen(score) threshold(0.92)
keep if score > 0.92
save match2, replace
* 4 合并结果
append using match1
duplicates drop idA, force
- threshold(0.92)经验值,可手动调到 0.90-0.95;
- 若数据量>100 万,先用 block(省份)分块再模糊,速度提升 10 倍以上。
三、再确认与手工清洗
- 同分异母:USCC 前 8 位相同→同一母公司,注意保留层级关系。
- 置信度标记:
- m1==0 & score>0.95 → 置信度 2
- 其余人工抽检 5%,错误率>5% 就调阈值或加变量(法人、注册资本区间)。
 
四、Python 极简方案
import pandas as pd
from fuzzy_match import match_company
A = pd.read_csv('A.csv')
B = pd.read_csv('B.csv')
m1 = pd.merge(A, B, on='uscc', how='left', indicator=True)
m2 = match_company(
        A.loc[m1['_merge']=='left_only', 'name_pure'],
        B['name_pure'],
        method='jw', threshold=0.92)
fuzzy_match 底层用 rapidfuzz,100 万×100 万约 3-5 分钟跑完。
五、一句话总结
“USCC 能连就不模糊,模糊必须加块变量,再人工抽检 5%”——按这条铁律,无论工商、专利、海关还是招投标,都能把匹配准确率拉到 98% 以上。祝拼接顺利!