group1 group2 info
100 1 .
100 1 .
200 1 10
200 2 20
300 2 .
然后,对于1组,1组复制的“信息”到其他group1s如果第2组是相同的。
那么结果会是这样。
group1 group2 info
100 1 10
100 1 10
200 1 10
200 2 20
300 2 20
我试图做到这一点使用bysort,但不能想办法做到这一点..
group1 group2 info
100 1 .
100 1 .
200 1 10
200 2 20
300 2 .
然后,对于1组,1组复制的“信息”到其他group1s如果第2组是相同的。
那么结果会是这样。
group1 group2 info
100 1 10
100 1 10
200 1 10
200 2 20
300 2 20
我试图做到这一点使用bysort,但不能想办法做到这一点..
这会工作
bysort group2 (info): replace info = info[1]
发现这里的解决方案: http://www.stata.com/statalist/archive/2006-10/msg00928.html
这个问题令人费解,因为这个例子意味着变量group1
是无关紧要的。我会举个例子,而不是措辞作为权威。
通过@timat的解决方案是沿着正确的线路,但不执行任何操作,以检查明智约束使组中的非缺失值应该是相同的。
一种方法取决于一个事实,即最egen
函数忽略尽可能缺失值。因此,当且仅当每组中的最大值和最小值相同(并且不丢失)并且可以复制以代替观察组内的缺失值时,只有一个不同的非缺失值。 (如果所有的值丢失,没有任何问题的发生。)
clear
input group1 group2 info
100 1 .
100 1 .
200 1 10
200 2 20
300 2 .
end
bysort group2: egen max = max(info)
by group2: egen min = min(info)
replace info = max if max == min & missing(info)
list, sepby(group2)
+------------------------------------+
| group1 group2 info max min |
|------------------------------------|
1. | 100 1 10 10 10 |
2. | 100 1 10 10 10 |
3. | 200 1 10 10 10 |
|------------------------------------|
4. | 200 2 20 20 20 |
5. | 300 2 20 20 20 |
+------------------------------------+