Marx MaxEN
菜单

用 AI 协助数据清洗与合并:先核对键、重复和未匹配记录

摘要:两张表合并成功,并不说明键值、重复记录和样本范围正确。本指南用自产模拟企业年度表与地区对照表,说明怎样规范化字段、区分完全重复与键冲突、保留缺失和未匹配记录,并逐行核对处理依据。配套案例提供 Python 与 Stata 独立实算、原始模拟 CSV、审计表、清洗结果和完整复做包。

数据清洗与合并需要先决定每一行代表什么、哪些字段可以标识一条记录,以及遇到异常时允许怎样处理。程序返回成功,只说明某种操作完成了;重复键、未匹配记录或被填成零的缺失值,仍可能改变后续样本。让 AI 协助时,可以把检查和执行交给它,但应将处理规则写清,并留下能回查原记录的成果。

查看实际清洗与合并案例。本例使用两张自产模拟表,独立运行 Python 与 Stata,公开输入、代码、逐行审计、全部匹配状态和数值对照。它用于说明处理方法,不代表真实企业数据或研究结论。

先定义两张表的键

主表描述企业年度,每行的键是 firm_id + year;地区对照表每家企业只应有一个有效地区,键是 firm_id。同一家企业可以在主表出现多个年份,故两表应按企业执行多对一合并。在 Stata 中对应 merge m:1 firm_id;先核对主表企业年度唯一、对照表企业唯一,再执行合并。官方 merge 说明

本例 firm_id 是五位文本编码,00101 的前导零保留。year 应是四位年份;revenue 是允许合法千位逗号的非负数值,employees 是非负整数。空数值表示缺失,不能补零。这些是模拟表的数据字典,实际研究应按来源重定规则;文本编号不应因为看起来像数字就擅自转成数值。

完全重复与键冲突分开处理

先去掉字段首尾空格,再校验键和数值。主表有一条无效年份、一条缺少编号,以及一条不能解析的 revenue,分别进入审计记录,不把强制转换产生的缺失当作合法输入。在 Stata 的程序里,转换前先标记无效项,之后的 force 只是计算准备,相关记录仍被隔离。

两条规范化后全部有效内容相同的记录,可以按明确规则保留最早来源行,把额外记录标为 duplicate_removed。来源行号不参与“内容相同”的判断,原始 CSV 也保持不变。Stata 的 duplicates 可以帮助查找重复,但“对键去重”与“对整行内容去重”会有不同含义。

若相同键对应不同内容,不能随便保留第一条。主表中的一个企业年度有两种 revenue,对照表中的一家企业有两个地区;本例将每组冲突记录全部标为 key_conflict,保留来源行号,等待进一步核对。这样会减少进入合并的记录,也会影响匹配覆盖,必须在结果说明里交代。

保留合并后的三种状态

本次主表原始 16 行,隔离无效 3 行、移除额外完全重复 1 行、暂存冲突 2 行,剩下 10 条主表观测。对照表原始 10 行,经相应处理保留 6 行。两套实现对这些数量和逐行状态给出了相同结果。

合并状态本次数量如何理解
matched8主表观测找到有效地区
master_only2企业年度仍存在,但没有有效地区匹配
lookup_only1仅存在于对照表,没有主表年度观测

合并并集因此有 11 行。仅在对照表中的记录没有主表年份,不能把它解释成新增企业年度观测。merged-all.csv 保留全部状态;analysis-ready.csv 则保留清洗后的 10 条主表观测,包括未匹配者。它仍有一条 revenue 缺失、一条 employees 缺失,没有自动插补;后续估计应按实际变量再核对有效样本。

直接丢掉所有未匹配者,会留下另一份样本。这个选择有时符合研究目的,但应先解释未匹配来源和研究范围。本例的主表未匹配与地区对照表的键冲突有关,不能靠把地区随意填入来修复。

在 Marx Max 中提出清楚的要求

在 Marx Max 中打开案例会创建任务和材料说明,完整复做包包含两份原始模拟表及数据字典。可以先要求:

请阅读 README 和数据字典,先检查企业年度键与地区键。保留 raw 原文件,报告无效字段、完全重复和键冲突,按明确规则处理后再做多对一合并。输出逐行审计与全部匹配状态,不填补缺失、不任意选择冲突值;把本次结果与参考结果逐项比较。

程序应只读已选定的输入;新增文件写到本次练习目录。换成实际科研数据时,先确认来源、键含义、年份范围及合并关系,再讨论去重和筛选规则。若 AI 不能确认冲突的真实值,可以整理待核对项,不必为了完成一张干净表而编造答案。涉及实际材料的传输范围,另见研究数据与 AI 指南。

独立复做与核对

将包解压到新目录并保留参考成果。Python 使用标准库,从包根运行 python clean_merge.py --output-dir rerun/python。Stata 使用合法本机安装,在独立练习会话中先创建 rerun 目录,再运行 do clean_merge.do rerun/stata。后者会清空该会话并覆写指定输出中的同名文件,运行前保存已有工作。

按来源行号对照两个审计表,再核对清洗表、合并表和 counts.csv。比较数量相同还不够,应确认保留的编号、年份、数值和匹配状态一致。cross-check.json 记录本次两套独立实算的对照;重新运行产生的日志才是本次执行依据。

本次计算在 macOS 完成,未覆盖 Windows 真机或模型自动执行整套任务。配套程序能说明这组规则如何工作,不能替代对实际数据库定义和研究样本的判断。数据准备完成后,可以继续Stata 模型比较和回归结果转 Word,同时保留前面处理与样本变化的依据。