2026/2/14 23:53:28
网站建设
项目流程
天河微网站建设,个人可以做网站吗,化妆品网页设计模板,服务器租用后怎么使用温馨提示#xff1a;若页面不能正常显示数学公式和代码#xff0c;请阅读原文获得更好的阅读体验。 作者#xff1a; 连小白 (连享会) 邮箱#xff1a; lianxhcn163.com Title: Stata 文本清洗#xff1a;Mata moss 实现多值提取与去重Keywords: unique, levelsof, 正则表…温馨提示若页面不能正常显示数学公式和代码请阅读原文获得更好的阅读体验。作者连小白 (连享会)邮箱lianxhcn163.comTitle: Stata 文本清洗Mata moss 实现多值提取与去重Keywords: unique, levelsof, 正则表达式本文介绍如何在 Stata 中处理包含特殊字符或编码的文本数据重点展示如何从字符串中批量提取特定模式如 HTML 编码、电话区号等并识别其唯一值。文章通过由浅入深的实例详细讲解moss命令与 Mata 函数的配合使用帮助读者掌握一套可迁移的文本清洗流程。1. 引言为什么需要提取字符串中的唯一值数据处理中的常见问题在实证分析中我们经常遇到脏数据问题。以文献数据库为例作者姓名、机构名称等字段常包含 HTML 编码如aacute;表示ántilde;表示ñ这些编码会带来两个直接后果匹配失败同一个作者因编码差异无法正确合并。例如Saacute;nchez和Sánchez被视为两个不同的作者。统计偏差在计算作者发文量、合作网络时出现大量伪重复观测导致统计结果失真。类似的问题还出现在网页抓取的数据中混杂 HTML 标签电话号码、邮箱等字段需要提取特定部分如区号、域名PDF 提取的文本包含参考文献编号[1]、[2]等本文的解决思路本文提供一套可复用的处理流程核心思路分三步识别模式用正则表达式定义需要提取的内容如xxxx;形式的 HTML 编码批量提取用moss命令从每行字符串中提取所有匹配项汇总去重用 Mata 函数将提取结果转为向量并去重得到唯一值列表掌握这套流程后读者可以轻松迁移到自己的数据清洗任务中。基础知识本文涉及的命令和技能Stata 基础变量生成gen、字符串函数word()、substr()等正则表达式模式匹配的基本语法梁淑珍, 2022, Stata正则表达式教程.游万海, 2020, Stata: 正则表达式和文本分析.moss 命令需要安装用于批量提取字符串中的匹配项MataStata 的矩阵语言用于数据去重和向量操作严子凯, 连玉君, 2021, Stata-Mata 系列 (二)Mata 与 Stata 的交互.王宇桐, 2020, Stata - Mata 系列 (一)Mata 入门.如果尚未安装moss请先运行ssc install moss, replace2. 一个简单的例子提取字符变量中的唯一值假设我们有一个汽车数据集其中make变量包含品牌型号如Ford Mustang、Toyota Corolla现在需要提取所有出现过的品牌名称。2.1 Stata 常规做法levelsof常规做法是用levelsof命令. sysuse auto.dta, clear . gen brand word(make, 1) // 提取第一个单词作为品牌 . levelsof brand, local(brands) . ret list . dis r(levels) AMC Audi BMW Buick Cad. Chev. Datsun Dodge Fiat Ford Honda Linc. Mazda Merc. Olds Peugeot Plym. Pont. Renault Subaru Toyota VW Volvo但使用levelsof有两个局限结果存储在暂元中不便于后续处理如导出为表格无法处理复杂情况如一行有多个值需要提取2.2 用 Mata 实现去重uniqrows()下面展示 Mata 的做法。虽然对这个简单例子来说有些大材小用但它为后续复杂情况打下基础。代码演示*-------------------------------------------- * 示例1用Mata获取品牌唯一值 *-------------------------------------------- sysuse auto.dta, clear * 步骤1生成品牌变量 gen str20 brand word(make, 1) * 步骤2将Stata变量传入Mata putmata brand_m brand, replace // 说明putmata命令将Stata的brand变量复制到Mata的brand_m矩阵中 // replace选项表示如果brand_m已存在则覆盖 * 步骤3在Mata中去重 mata: brand_unique uniqrows(brand_m) // uniqrows()函数对矩阵的行去重返回唯一值 brand_unique // 显示结果 end * 步骤4可选将结果导回Stata clear getmata brand brand_unique, replace // getmata命令将Mata矩阵转为Stata变量 list, clean代码解读putmata将 Stata 数据送入 Mata 环境。Mata 是 Stata 的矩阵语言处理向量和矩阵运算比 Stata 循环快得多。uniqrows()Mata 内置函数对矩阵按行去重。如果输入是列向量就得到该列的唯一值。getmata将 Mata 矩阵导回 Stata生成新的数据集。温馨提示若页面不能正常显示数学公式和代码请阅读原文获得更好的阅读体验。