模糊匹配——stata matchit 函数

本文介绍了如何使用Stata进行数据模糊匹配,包括matchit函数的基本用法、代码示例及常见错误解决方法,并提供了从Excel文件导入数据的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引言

        数据清洗过程中常见的数据处理方式之一是:数据匹配,其中包括精确匹配与模糊匹配。精确匹配主要是指:需要匹配的两列数据数值或字符串完全一致,而在实际处理中需要匹配的两个变量并不总是存在完美的连接,此时就需要对两变量进行模糊匹配,如变量A(红富士苹果)与变量B(苹果(红富士))这类相似却并不完全相同的名称匹配。

二、精确匹配

        stata中常用的精确匹配函数为:merge函数,可实现一对多、多对一、一对一、多对多,具体参考stata软件中的help merge。

        excel中常用的精确匹配函数为:VLOOKUP函数,最近发现一款较为好用的插件(方方格子),如果处理数据为中文且数据量不大,建议使用,如果为英文且数据量万以上不建议使用,匹配效果有偏差且excel容易崩溃。

三、stata模糊匹配

        本节介绍stata模糊匹配常用到的matchit 函数。主要包括:函数中参数的含义、代码、实例、报错原因以及解决方法。

1.matchit函数

       官网给出的解释为:根据相似的文本模式匹配两个列或两个数据集。Raffo, J., & Lhuillery, S. (2009):matchit通过采用不同的基于字符串的匹配技术,在两个不同的文本字符串之间提供相似性评分。执行操作后会返回一个新的匹配程度变量( similscore ),取值为 0 到 1 ,similscore 为 1 时代表完全匹配,取值越小,相似度越低,匹配程度是一个相对量,不同的匹配方法通常产生不同的相似度评分,详见help matchit。

2.代码

        如果是同一表单中的两列数据,一对一模糊匹配,可直接使用

        matchit varname1 varname2 [, options]

        如果是两个表单中的两列数据匹配,要相对复杂一些

        matchit idmaster txtmaster using filename.dta , idusing (varname) txtusing(varname) [options]

a26b3251a2834bc993a7f159ec2d2663.jpeg

注:方括号中的单词不可当作代码,不能直接粘贴到代码行运行。

notation:varname1、 varname2、分别代表同一表单中匹配源与待匹配列的变量名称。idmaster指的是来自当前文件(主文件)的数值型变量名。txtmaster 指的是当前文件(主文件)中要进行匹配的字符型变量名。(注:idmaster 应该唯一识别txtmaster)。idusing(varname)与 txtusing(varname)同理,分别指来自于filename.dta数据集中待匹配的数值型变量以及字符型变量。

3.实例:模糊匹配两个数据集中的公司名称

(1)安装加权包:freqindex

ssc install freqindex, replace
ssc install matchit,   replace

(2)将xlsx文件转化为dta

         安装xls2dta命令

ssc install xls2dta,replace

         创建文件夹,改变缺省路径。

capture mkdir e:/xls2dta
cd e:/xls2dta

         此时会看到E盘中会产生一个空的xls2dta文件夹,将待转化的两个表格放在此文件夹下。

        转化:

ssc install filelist,replace
xls2dta,replace recursive : import excel using e:/xls2dta

此时,在该文件夹下的表格都会生成dta版本。具体的其它转化详见https://blog.youkuaiyun.com/crack6677/article/details/105346854

(3)匹配

use sampleA.dta, replace
matchit IDmaster sub_nameA using sampleB.dta , idusing (IDusing) txtusing(sub_nameB)

其中sampleA.dta属于源文件,IDmaster是源变量中的唯一标识符(数值型),sub_nameA源变量的变量名称,sampleB.dta属于待匹配文件,相对的IDusing是数值型唯一标识符,sub_nameB则为待匹配变量的变量名。详见:https://www.lianxh.cn/news/7aba3c217a016.html

(4)报错及解决办法(第一次用stata者重点)

        第一个:variable IDmaster not found

        检查数据导入是否直接从“文件——导入——excel电子表格”中导入stata软件的,如果是则需要检查数据第一行是否没有被识别成为变量名,如果默认导入的话系统给出的变量名会是很直接的A、B、C、。。。

eab8fef103ee4a6792362f7508e3a36f.jpeg 

        建议使用以下代码,将excel中第一行定义为变量名称,其中sampleA为excel文件名(注意本文sampleA已经在默认路径下,前文提到了更改路径的方法,请参考,如果出错,试试加上路径)。

 import excel sampleA,first

更简单的方法:不用IDmaster作为变量名,直接使用A。

        第二个:no; dataset in memory has changed since last saved

        出现此问题的原因很简单:数据集冲突了,之前引入了sampleA.dta,后续引入sampleB.dta数据集就会报错,只需要在引入新数据集之前加一行代码即可:

clear

        第三个:weights not allowed

        出现此错误的原因是:把官网给出代方括号和方括号里面的option也加到了运行代码里面,去掉就可以了。

        第四个:XXXX not found

        仔细看一下,官网给出的参数解析:待匹配数据集需要加上路径,查阅网友解答发现,stata在同时引入两个文件时好像比较麻烦,建议加上路径,避免出错。

34451b0825b24971a4d6e92758ddba82.jpeg

 四、本人代码

 matchit A B using E:\xls2dta\sampleB.dta , idusing (A) txtusing(B)

五、结果

961ecc5750674a638e1087577e460797.jpeg

注:Break ,本人选择运行终止了,不属于报错范围。不详细的地方建议参考连享会https://www.lianxh.cn/news/7aba3c217a016.html,与官方帮助文档help matchit。

 

### Stata中的模糊匹配方法 在Stata中实现模糊匹配可以通过多种工具和命令完成。以下是几种常见的方法及其特点: #### 使用`fuzzyjoin`命令 `fuzzyjoin`是一个强大的第三方包,用于执行基于字符串相似度的模糊匹配操作。它允许用户通过设置阈值来控制匹配精度。安装该命令可通过以下代码完成[^5]: ```stata ssc install fuzzyjoin ``` 一旦安装完毕,可以使用如下语法进行模糊匹配: ```stata fuzzyjoin master_var using_var, match(master_var using_var) generate(matched_id) threshold(0.8) ``` 上述代码表示将主数据集(`master`)中的变量`master_var`与辅助数据集(`using`)中的变量`using_var`按照字符串相似度进行匹配,并生成一个新的变量`matched_id`存储匹配结果。参数`threshold(0.8)`指定了只有当两个字符串之间的相似度大于等于0.8时才认为它们匹配成功。 #### 利用`reclink`命令 另一个常用的模糊匹配工具是`reclink`,它可以处理更复杂的场景,比如涉及多个字段的同时比较以及加权距离计算等问题。同样地,先要确保已正确安装此扩展模块: ```stata ssc install reclink ``` 之后便可依据实际需求编写相应的脚本文件来进行记录链接分析工作流程设计[^6]。 #### 自定义解决方案 - 编写程序逻辑 如果现有的现成功能无法满足特定业务要求,则还可以尝试自己动手开发专属算法实现自定义化程度更高的模糊查找机制。例如利用Levenshtein编辑距离或其他自然语言处理技术构建评分模型评估候选对象间的关系强度等等[^7]。 以上就是在Stata环境下开展近似配对任务的一些主要途径介绍。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值