stata数据合并
Stata merge 后 _merge 全是 1 或 2(一条都没匹配上)
匹配键类型不一致是头号原因:一边是字符串一边是数值,或者键里有空格、前导零。describe 一眼看穿。
报错原文
tab _merge → _merge==1: 500, _merge==2: 480, _merge==3: 0为什么会报这个错
merge 没报错,但 _merge==3 为 0,说明一条都没匹配上。原因几乎都出在匹配键上:
- 类型不一致。主表
id是str6,using 表是long,Stata 不会自动转换,直接判不匹配。 - 空格或不可见字符。
"001"和"001 "不相等。 - 前导零。
"001"和1转成字符串后变成"1",对不上。 - 编码不一致。中文键在不同来源里一个是 UTF-8 一个是 GBK。
- 键名不同。一边叫
firmid,一边叫firm_id。
怎么解决
第一步:对比两边键的类型
describe id主表和 using 表各看一次,str 和 long/int 必须统一。
第二步:统一类型
* 数值转字符串(保留前导零用 %06.0f)
tostring id, replace format(%06.0f)
* 字符串转数值
destring id, replace第三步:清理空格
replace id = strtrim(id)
replace id = strupper(id)第四步:重新 merge 并检查
merge 1:1 id using "using.dta"
tab _merge_merge==3 的比例应该接近你预期。
代码示例
* 主表
describe id
* using 表
use "using.dta", clear
describe id
* 统一为字符串并去空格
use "master.dta", clear
tostring id, replace format(%06.0f)
replace id = strtrim(id)
merge 1:1 id using "using.dta"
tab _merge同工具的其他报错
报错解决了,但方法还没搞懂?
报错只是表象。因果推断、面板数据、稳健性检验这些方法背后的逻辑,知识库里按「原理 × 直觉 × 代码」讲清楚了。
进入知识库 →