Stata 基于行中的值连接ID,忽略相同ID之间的连接

Stata 基于行中的值连接ID,忽略相同ID之间的连接,stata,Stata,这是我之前问题的后续内容: 我现在要考虑的是,在相同的 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

这是我之前问题的后续内容:

我现在要考虑的是,在相同的<代码> 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中执行此操作?

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

: 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 |
     +------------------------------------------------------------------------+

可以按如下方式轻松更改矩阵对角线中的值:

: 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 |
     +------------------------------------------------------------------------+