为什么Stata中merge m:m容易出问题
Stata在数据整理方面的功能很强大,如产生新数据、横向合并数据等。特别是处理微观数据的时候,不同的数据往往保存在不同的数据集中,需要把不同的数据集进行合并,然后进行数据分析。合并数据需要用merge命令。
merge命令选项
- merge 1:1
- merge 1:m
- merge m:1
- merge m:m
其中:merge m:m 很少使用。Stata的manual中也提到不要用这个合并的方式。如果想多对多匹配,一般用cross或joinby命令。
- cross
- joinby
为什么不用merge m:m ,其实很简单,把该命令的匹配原理搞清楚就知道了。或者写一段代码,看看结果。
现在许多都不看manual,而是猜想命令。命令是Stata公司写的,一定要第一时间看Stata的manual里面的解释,而不是看某某怎么写的。下面用一个简单例子看看。
例子:个人数据与家庭数据合并
假设有一个包含家庭里面个人信息的数据,还有一个包含家庭中房产的数据。
- 导入个体数据集,并保存
clear
input ///
hid pid age
1 11 45
1 12 42
1 13 10
1 14 7
end
tempfile a
save "`a'"
- 导入家庭房产数据
clear
input ///
hid houseid size
1 1 120
1 2 100
end
- 合并两个数据
merge m:m hid using "`a'"
list
- 最后合并的结果
. list
+------------------------------------------------+
| hid houseid size pid age _merge |
|------------------------------------------------|
1. | 1 1 120 11 45 matched (3) |
2. | 1 2 100 12 42 matched (3) |
3. | 1 2 100 13 10 matched (3) |
4. | 1 2 100 14 7 matched (3) |
+------------------------------------------------+
上面list列出了最后合并的结果。
- 个人数据是4行,家庭数据2行,最后匹配完,是4行数据。
- 匹配结果的第三行是匹配的家庭数据的第2行数据。
- 上述结果明显不是多对多的匹配。
网友评论