根据行中的值连接ID,而忽略相同ID之间的连接

时间:2019-10-15 14:28:09

标签: stata

这是我之前的问题:Connect IDs based on values in rows的后续。

我现在考虑一种情况,其中相同的idb之间的连接应归类为0

输出类似于我之前的文章中的矩阵,但是对角线元素等于0

      62014 62015 62016 62017 62018
62014   0     1     0     1     1
62015   1     0     0     0     0
62016   0     0     0     0     1
62017   1     0     0     0     1
62018   1     0     1     1     0

如何在Stata中做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以按如下所示轻松更改矩阵对角线中的值:

: B
[symmetric]
       1   2   3   4   5
    +---------------------+
  1 |  1                  |
  2 |  1   1              |
  3 |  0   0   1          |
  4 |  1   0   0   1      |
  5 |  1   0   1   1   1  |
    +---------------------+


: _diag(B, 0)

: B
[symmetric]
       1   2   3   4   5
    +---------------------+
  1 |  0                  |
  2 |  1   0              |
  3 |  0   0   0          |
  4 |  1   0   0   0      |
  5 |  1   0   1   1   0  |
    +---------------------+

对于您的问题,您只需执行以下操作即可:

mata: B = foo1(A)
mata: _diag(B, 0)

getmata (idb*) = B

list

     +------------------------------------------------------------------------+
     |   idb      idd1      idd2      idd3   idb1   idb2   idb3   idb4   idb5 |
     |------------------------------------------------------------------------|
  1. | 62014    370490    879271   1112878      0      1      0      1      1 |
  2. | 62015    457013   1112878    370490      1      0      0      0      0 |
  3. | 62016    341863   1366174    533773      0      0      0      0      1 |
  4. | 62017    879271    327069    341596      1      0      0      0      1 |
  5. | 62018   1391443   1366174    879271      1      0      1      1      0 |
     +------------------------------------------------------------------------+