根据行中的值连接ID [英] Connect IDs based on values in rows

查看:17
本文介绍了根据行中的值连接ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我计划进行网络分析,我需要以一种可以使用社区贡献的命令nwcommands的方式组织我的数据。

以下是数据示例:

* Example generated by -dataex-. To install: ssc install dataex
clear
input str11 idb long(idd1 idd2 idd3)
"62014"  370490  879271 1112878
"62015"  457013 1112878  370490
"62016"  341863 1366174  533773
"62017"  879271  327069  341596
"62018" 1391443 1366174  879271
end
最终,当一个idb连接到另一个idb时,我希望矩阵的值为1,如果不是,则0。只要两个idb至少共享一个idd(不必在同一idd列中),就存在连接。

示例输出:

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

如何在Stata中执行此操作?

推荐答案

以下是使用Stata的矩阵编程语言mata完成此操作的一种方法:

/* Prepare data */

putmata A = (idd*), replace

/* Define mata functions */

mata:

function foo2(b, c)
{
  res = 0
  for (i = 1; i <= cols(b); i++) {
      for (j = 1; j <= cols(c); j++) {
          if (b[i] == c[j]) res = 1
      }
  }
  return(res)
}

function foo1(a)
{
  M = J(rows(a), rows(a), 0)
  for (i = 1; i <= rows(a); i++) {
      for (j = 1; j <= rows(a); j++) {
          k = foo2(a[i,.], a[j,.])
          if (k == 1) M[i, j] = 1 
      }
  }
  return(M)
}

end

/* Execute and get results */

mata: B = foo1(A)

getmata (idb*) = B

list

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

这篇关于根据行中的值连接ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆