Stata - 创建一组所有可能无法匹配的对

时间:2015-10-26 06:37:59

标签: stata

我有观察到的匹配对(供应商 - 买方)的观察数据,我想用它来构建一组反事实观察。 假设我们观察到两个供应商(X和Y)和3个买家(A,B和C)。 我们观察到供应商X与买方A签订了200万美元的合同,与买方B签订了500万美元的合同。 我们还观察到供应商Y只与买方C签订了一份价值400万美元的合同。 我想基于一组不匹配的对来构建一组反事实。我想为每个反事实观察设置一个假设的合约值,该值与观察到的数据中各方签约的最大值相等。例如,基于上述观察结果,这就是我们对反事实的看法:

反事实观察#1:X与C的价值为500万美元(因为X对他观察到的最大合约有500万美元而C有400万美元,500万美元更高) 反事实观察#2:Y与A的价值为400万美元(因为Y的观察到的最大合约为400万美元,A有200万美元,400万美元更高) 反事实观察#3:Y与B的价值为500万美元(因为Y的观察到的最大合约为400万美元,而B有500万美元,500万美元更高)

这里是描述我的数据的Stata示例代码..

clear
input str3(supplier buyer) float cont_value
"X" "A" 2
"X" "B" 5
"Y" "C" 4
end

2 个答案:

答案 0 :(得分:1)

除了merge一系列数据集的Statalist答案之外,您还可以使用fillin来实现此目的。

clear *
input str3(supplier buyer) float cont_value
"X" "A" 2
"X" "B" 5
"Y" "C" 4
end

fillin supplier buyer
list 

tempvar cont_val cont_val1
by supplier, sort : egen `cont_val' = max(cont_value) 
by buyer, sort : egen `cont_val1' = max(cont_value)

egen cont_val = rowmax(`cont_val' `cont_val1') if _fillin
replace cont_val = cont_value if !_fillin

drop _fillin
sort supplier buyer

list supplier buyer cont_value cont_val

答案 1 :(得分:1)

clear
set more off

input str3(supplier buyer) value
"X" "A" 2
"X" "B" 5
"Y" "C" 4
end

list

fillin supplier buyer

list, sepby(supplier)

bysort supplier : egen maxsupp = max(value) 
bysort buyer : egen maxbuy = max(value)

egen value2 = rowmax(max*) if _fillin
replace value2 = value if !_fillin

sort supplier buyer
order value2, after(value)
list, sepby(supplier)