我有一组工厂(A
,B
,C
)既可以充当发送者也可以充当接收者,但实际上,并不是所有人都在实际发送或接收。我需要填写缺失的连接,以使数据矩阵为“正方形”(或“二次”),而不是将其矩形化。
这是我的数据:
clear
input str1 sender str1 receiver value
A B 100
A C 200
B A 100
end
Stata的fillin
命令几乎可以满足我的要求:
fillin sender receiver
drop if sender == receiver
list
+-------------------------------------+
| sender receiver value _fillin |
|-------------------------------------|
1. | A B 100 0 |
2. | A C 200 0 |
3. | B A 100 0 |
4. | B C . 1 |
+-------------------------------------+
下面是我期望的输出:
+-----------------------------+
| sender receiver value |
|-----------------------------|
1. | A B 100 |
2. | A C 200 |
3. | B A 100 |
4. | B C . |
5. | C A . |
6. | C B . |
+-----------------------------+
是否有一种简单的方法?
答案 0 :(得分:2)
比@Pearly Spencer的解决方案更通用。
clear
input str1 sender str1 receiver value
A B 100
A C 200
B A 100
end
egen tag = tag(receiver)
local N = _N
expand 2 if tag
replace sender = receiver if _n > `N'
replace value = . if _n > `N'
fillin sender receiver
drop if sender == receiver
list, sepby(sender)
+-------------------------------------------+
| sender receiver value tag _fillin |
|-------------------------------------------|
1. | A B 100 1 0 |
2. | A C 200 1 0 |
|-------------------------------------------|
3. | B A 100 1 0 |
4. | B C . . 1 |
|-------------------------------------------|
5. | C A . . 1 |
6. | C B . . 1 |
+-------------------------------------------+
答案 1 :(得分:1)
您需要向Stata提供缺少的信息,然后应用fillin
:
clear
input str1 sender str1 receiver value
A B 100
A C 200
B A 100
end
set obs 4
replace sender = "C" in 4
replace receiver = "A" in 4
fillin sender receiver
drop if sender == receiver
list, separator(0)
+-------------------------------------+
| sender receiver value _fillin |
|-------------------------------------|
1. | A B 100 0 |
2. | A C 200 0 |
3. | B A 100 0 |
4. | B C . 1 |
5. | C A . 0 |
6. | C B . 1 |
+-------------------------------------+