1

我有以下数据集,可以告诉我两个人之间是否存在联系:

pos_1    pos_2
  2        4
  2        5
  1        2
  3        9
  4        2
  9        3

以上读作 person_2 与 person_4 相连,...,person_4 与 person_2 相连,person_9 与 person_3 相连

我想创建第三个二分变量recip,让我知道连接是否是互惠的,换句话说,如果 person_X 连接到 person_Y 是 person_Y 连接到 person_X,我会得到:

pos_1    pos_2    recip
  2        4        1
  2        5        0
  1        2        0
  3        9        1
  4        2        1
  9        3        1
4

1 回答 1

3

2,4 和 4,2 可以看作是倒数的,因为它们都排序为 2,4。min()一起max()就足以做到这一点。使用空格或其他标点符号来消除歧义,例如 1,23 和 12,3。

gen pair = string(min(pos_1, pos_2)) + " " + string(max(pos_1, pos_2)) 
bysort pair : gen recip = _N == 2 

参见 Cox, NJ 2008。身份分裂问题,或如何对二元组进行分组。 Stata Journal 8:588-591,可在http://www.stata-journal.com/sjpdf.html?articlenum=dm0043 访问

这也提供了数据检查,因为每一对应该出现一次或两次,但不会更多:

by pair: assert _N == 1 | _N == 2 

或者

duplicates report pair 
于 2013-10-23T06:43:23.570 回答