本文作者:王宇新 河南大学经济学院
本文编辑:崔雨晨
技术总编:马梦杰
Stata and Python 数据分析
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
ssc install reclink
reclink varlist using filename, idmaster(varname) idusing(varname) gen(newvarname)
varlist
这是主数据集(也就是当前打开的数据集中)中用于匹配的变量列表。这些变量将作为与外部文件(通过using指定)中记录进行匹配的依据。例如,如果处理的是关于人员信息的数据,varlist可能包含姓名、出生日期、地址等变量。这些变量的内容会和外部文件中的对应变量进行比较,以确定记录是否匹配。using filename
using是 Stata 中用于指定外部数据文件的关键字。filename是要使用的外部文件的名称。这个外部文件包含了要与主数据集进行匹配的记录。文件格式可以是 Stata 能够识别的格式,如.dta 格式(Stata 数据集格式)等。例如,如果外部文件名为external_data.dta,那么using external_data.dta表示将这个外部数据集用于匹配。idmaster(varname)
这是在主数据集中指定唯一标识符变量的选项。varname是主数据集中的一个变量名称,这个变量用于唯一标识每个记录。例如,在一个包含学生信息的主数据集中,idmaster(student_id)表示使用student_id变量作为主数据集的唯一标识符。在匹配过程中,这个变量可以帮助确保记录的正确匹配和关联,避免混淆不同的个体记录。idusing(varname)
与idmaster相对应,这是在外部(using)数据集中指定唯一标识符变量的选项。varname是外部数据集中的一个变量名称。例如,如果外部数据集也是关于学生信息的,idusing(external_student_id)表示使用external_student_id变量作为外部数据集的唯一标识符。在匹配过程中,通过主数据集和外部数据集的唯一标识符来准确地关联记录。gen(newvarname)
这个选项用于在主数据集中生成一个新变量。newvarname是要生成的新变量的名称。这个新变量将用于记录匹配的结果,可以用来表示记录是否匹配、匹配的程度等信息。例如,gen(match_result)会在主数据集中创建一个名为match_result的新变量,根据匹配操作的结果为这个变量赋值,如 0 表示不匹配,1 表示完全匹配等。[options]
这是一系列可选的参数,用于进一步定制匹配操作。一些常见的选项包括:
权重选项:如wmatch(match weight list)选项用于为匹配成功的变量指定权重,用于调整不同变量在匹配过程中的重要性。权重越高,表示该变量在匹配过程中的重要性越大。当你认为某些变量在匹配过程中比其他变量更重要时,可以通过wmatch选项为这些变量赋予更高的权重。例如,如果你在匹配公司名称时,认为城市名称比公司名称的其他部分更重要,可以为城市名称赋予更高的权重。
阈值设置选项:如minscore(#),其中#是一个数值。这个选项用于设置匹配的相似度阈值。例如,minscore (0.8)表示匹配的相似度得分需要达到 0.8 及以上才认为是匹配成功。这个阈值的选择取决于数据的特点和匹配的严格程度要求。如果数据质量较高,可能需要设置较高的阈值;如果数据存在较多噪声或误差,可能需要降低阈值。
主数据集(master data)为:

操作步骤:
首先,在Stata中加载旧的客户数据库:
use old.dta, clear
然后,使用reclink命令进行数据匹配和整合:
reclink customer_name phone_number email_address using new.dta, idmaster(id_old) idusing(id_new) gen(match_score) minscore(0.7)
reclink进行模糊匹配,使用customer_name、phone_number和email_address作为匹配变量。
idmaster(id_old) 和 idusing(id_new)为指定主数据集和从数据集中的唯一标识符。
gen(match_score)为生成一个新变量match_score来存储匹配得分。
minscore(0.7)设置匹配的最小得分阈值为0.7。这里将匹配阈值设置为 0.7,是因为客户信息可能存在一些小的变化,如电话号码的格式调整或名字、电子邮件地址的拼写错误等。
生成的结果:

根据新生成的变量match_score的得分来看,“Jerry”的得分为0.9963,“David”的得分为0.9985其余观测值的得分均为1。也就是说,除了Jerry和David的记录外,其他记录在两个数据集中都完全匹配。对于Jerry和David,尽管存在轻微的拼写差异,但匹配得分仍然非常高,表明这些记录很可能是同一客户。在实际应用中,可能需要进一步的人工检查来确认这些匹配是否准确。
using data中第6个观测值没有被匹配进来,是因为其customer_name、phone_number、email_address,包括唯一标识码id_new和master data的所有观测值都不相似。
_merge表示匹配的结果,值为 1表示观测值仅来自master data,在合并操作中,没有找到与之匹配的using data中的观测值。值为 2表示观测值仅来自从数据集,在合并操作中,没有找到与之匹配的主数据集中的观测值。值为 3表示观测值在主数据集和从数据集中都有匹配,是成功匹配的观测值。由于该结果_merge的值均为3,表示master data中的所有观测值都在using data中能够找到匹配的观测值。
此外,在使用reclink命令时,还有一些小技巧值得注意。当处理大规模数据集时,匹配过程可能耗时较长,可以合理利用 Stata 的后台运行功能,让电脑在空闲时段默默完成任务,避免占用过多即时操作时间。同时,若遇到匹配结果不理想的情况,不要急于调整阈值,先仔细检查数据的质量,查看是否存在录入错误、格式不一致等问题,有时候,简单的数据清洗就能大幅提升匹配效果。
总之,reclink命令为Stata用户打开了高效数据匹配整合的大门,快在自己的项目里试试,解锁更多数据分析潜能!要是在使用过程中有疑问,欢迎交流探讨哦!
—— End ——
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持

