Stata-生成忽略顺序的唯一组合

Stata-生成忽略顺序的唯一组合,stata,Stata,我试图创建一个数据集,该数据集按ID列出所有行的组合,但忽略组合顺序(即Apple->Orange与Orange->Apple相同)。我开始使用问句,它让我得到所有的组合,保持不同的顺序。如何修改此代码以获得所需的输出?或者我应该使用一种完全不同的方法,这种方法是什么 我当前使用链接问题所做工作的代码: clear all input id str10 fruit 1 "Apple" 1 "Banana" 1 "Orange" 2

我试图创建一个数据集,该数据集按ID列出所有行的组合,但忽略组合顺序(即Apple->Orange与Orange->Apple相同)。我开始使用问句,它让我得到所有的组合,保持不同的顺序。如何修改此代码以获得所需的输出?或者我应该使用一种完全不同的方法,这种方法是什么

我当前使用链接问题所做工作的代码:

clear all

input id str10 fruit 
1 "Apple"
1 "Banana"
1 "Orange"
2 "Orange"
2 "Apple"
3 "Pear"
3 "Kiwi"
3 "Apple"
3 "Lemon"
end

tempfile t1
save `t1'
clear

use `t1'
rename fruit f2
keep id f2
joinby id using `t1'
order id fruit f2
sort id  fruit f2

drop if fruit==f2

list, sepby(id)
我期望的输出是:

ID  fruit   f2
1   Apple   Banana
1   Apple   Orange
1   Banana  Orange
2   Orange  Apple
3   Pear    Kiwi
3   Pear    Apple
3   Pear    Lemon
3   Kiwi    Apple
3   Kiwi    Lemon
3   Apple   Lemon

joinby
之后,您可以生成一个辅助变量,将fruit和f2放在一个变量中并对它们进行排序,确保相同的组合具有相同的值。然后,您可以根据此变量和id使用
duplicates drop
,来删除重复项

clear 
input id str10 fruit 
1 "Apple"
1 "Banana"
1 "Orange"
2 "Orange"
2 "Apple"
3 "Pear"
3 "Kiwi"
3 "Apple"
3 "Lemon"
end

tempfile t1
save `t1'

rename fruit f2
joinby id using `t1'
order id fruit f2
sort id  fruit f2

drop if fruit==f2
gen combination = cond(fruit < f2, fruit + " " + f2, f2 + " " + fruit)
duplicates drop id combination, force
drop combination

list, sepby(id)

     +----------------------+
     | id    fruit       f2 |
     |----------------------|
  1. |  1    Apple   Banana |
  2. |  1    Apple   Orange |
  3. |  1   Banana   Orange |
     |----------------------|
  4. |  2    Apple   Orange |
     |----------------------|
  5. |  3    Apple     Kiwi |
  6. |  3    Apple    Lemon |
  7. |  3    Apple     Pear |
  8. |  3     Kiwi    Lemon |
  9. |  3     Kiwi     Pear |
 10. |  3    Lemon     Pear |
     +----------------------+
清除
输入id str10
1“苹果”
1“香蕉”
1“橙色”
2“橙色”
2“苹果”
3“梨”
3“猕猴桃”
3“苹果”
3“柠檬”
结束
临时文件t1
保存't1'
将水果命名为f2
使用't1'的joinby id
订单号水果f2
排序id果f2
如果水果=f2,则下降
发电机组合=秒(水果