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

Stata-创建一组所有可能的不匹配对,stata,Stata,我有观察到的配对(供应商-买方)的观察数据,我想用这些数据来建立一套反事实的观察结果。 假设我们观察到两个供应商(X和Y)和三个买家(A、B和C)。 我们发现供应商X与买方a签订了200万美元的合同,与买方B签订了500万美元的合同。 我们还发现,供应商Y与买方C仅签订了一份价值400万美元的合同。 我想基于不匹配对的集合构建一组反事实。我想为每一个反事实观测值设定一个假设的合同值,该值等于观测数据中每一方的最大合同值。例如,这是我们根据上述观察得出的反事实: 反事实观察#1:X与C的价值为50

我有观察到的配对(供应商-买方)的观察数据,我想用这些数据来建立一套反事实的观察结果。 假设我们观察到两个供应商(X和Y)和三个买家(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与B的最大合同价值为400万美元,而B的合同价值为500万美元,500万美元更高)

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

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

除了Statalist上的答案,即
合并
一系列数据集,您还可以通过
填充
实现这一点

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

交叉张贴在你的答案之前通过我的,这几乎是相同的。这里我唯一的建议是,在创建最终结果时,将条件设置为
\u fillin
,而不是
cont\u value
。是的,我看到了其中的逻辑。虽然我只是想知道OP是否意味着只为不存在的供应商-买方对或任何缺少的
cont_value
(再次阅读问题,OP没有提到这一点,因此可能
\u fillin
是正确的)。当然,如果所有现有供应商-买方的
cont_值
均未缺失,则结果相同。总的来说,我想我同意你的建议。谢谢
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)