我有两个数据集,我已经在Stata中附加在一起。
两个数据集中都有一个变量,比如Age。我对数据进行了排序,以便年龄按升序排列。我想删除每个数据集中的观测值,这些数据集对应的年龄不匹配。
数据集1:
Obs Age
1 7
2 8
3 10
4 5数据集2:
Obs Age
1 10
2 5
3 9
4 7按升序组合和排序:
Obs Age
1 5
2 5
3 7
4 7
5 8
6 9
7 10
8 10因此,由于排序时的年龄与观测值5和6不匹配,所以我想删除它们。本质上,我想要一种方法,在相邻的数字对中循环,比较它们的值,这样我就只剩下相同年龄的对了。
发布于 2018-10-20 18:51:37
重复观察是没有效率的,而且在绝大多数情况下没有必要。
以下几点对我来说是可行的:
clear
input age
5
5
7
7
8
9
10
10
end
generate tag = age != age[_n+1] & age != age[_n-1]
list
+-----------+
| age tag |
|-----------|
1. | 5 0 |
2. | 5 0 |
3. | 7 0 |
4. | 7 0 |
5. | 8 1 |
|-----------|
6. | 9 1 |
7. | 10 0 |
8. | 10 0 |
+-----------+在去掉相关的观察之后,您得到了预期的结果:
keep if tag == 0
list
+-----------+
| age tag |
|-----------|
1. | 5 0 |
2. | 5 0 |
3. | 7 0 |
4. | 7 0 |
5. | 10 0 |
|-----------|
6. | 10 0 |
+-----------+https://stackoverflow.com/questions/52908995
复制相似问题