假设我有
group1 group2 info
100 1 .
100 1 .
200 1 10
200 2 20
300 2 .
然后,对于group1,复制group1'" info"如果group2相同,则为其他group1。
所以结果就是这样。
group1 group2 info
100 1 10
100 1 10
200 1 10
200 2 20
300 2 20
我尝试使用bysort做到这一点,但无法想办法做到这一点。
答案 0 :(得分:1)
问题令人费解,因为该示例暗示变量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 |
+------------------------------------+
答案 1 :(得分:0)
这样可行
bysort group2 (info): replace info = info[1]
在此找到解决方案: http://www.stata.com/statalist/archive/2006-10/msg00928.html