Объединение наборов данных с использованием только не пропущенных идентификаторов - PullRequest
0 голосов
/ 01 марта 2019

У меня есть два набора данных, которые выглядят как следующие таблицы:

  +------------+
  | id |  var1 |
  |----+-------|
  |  1 | 42082 |
  |  2 | 42275 |
  |  2 | 42474 |
  |  3 | 42141 |
  |  3 | 42502 |
  |  4 | 42203 |
  +------------+

  +------------+
  | id |  var2 |
  |----+-------|
  |  1 | 41783 |
  |  2 | 42120 |
  |  4 | 42218 |
  |  4 | 41525 |
  +------------+

Я хочу создать один набор данных, как показано ниже:

  +--------------------+
  | id |  var1 |  var2 |
  |----+-------+-------|
  |  1 | 42082 | 41783 |
  |  2 | 42275 | 42120 |
  |  2 | 42474 | 42120 |
  |  4 | 42203 | 42218 |
  |  4 | 42203 | 41525 |
  +--------------------+

Однако, когда я используюmerge команда:

merge id using table2

Я получаю следующее:

  +--------------------+
  | id |  var1 |  var2 |
  |----+-------+-------|
  |  1 | 42082 | 41783 |
  |  2 | 42275 | 42120 |
  |  2 | 42474 | 42120 |
  |  3 | 42141 |     . |
  |  3 | 42502 |     . |
  |  4 | 42203 | 42218 |
  |  4 | 42203 | 41525 |
  +--------------------+

Я также пытался использовать команду append:

append using table2

Нов этом случае я получаю:

  +--------------------+
  | id |  var1 |  var2 |
  |----+-------+-------|
  |  1 | 42082 |     . |
  |  2 | 42275 |     . |
  |  2 | 42474 |     . |
  |  3 | 42141 |     . |
  |  3 | 42502 |     . |
  |  4 | 42203 |     . |
  |  1 |     . | 41783 |
  |  2 |     . | 42120 |
  |  4 |     . | 42218 |
  |  4 |     . | 41525 |
  +--------------------+

Что я делаю не так?

1 Ответ

0 голосов
/ 01 марта 2019

Вам необходимо использовать команду joinby:

clear
input id var2
1 41783
2 42120
4 42218
4 41525
end

tempfile dataset2
save `dataset2'

clear
input id var1
1 42082
2 42275
2 42474
3 42141
3 42502
4 42203
end

joinby id using `dataset2'

list, sepby(id)

     +--------------------+
     | id    var1    var2 |
     |--------------------|
  1. |  1   42082   41783 |
     |--------------------|
  2. |  2   42275   42120 |
  3. |  2   42474   42120 |
     |--------------------|
  4. |  4   42203   42218 |
  5. |  4   42203   41525 |
     +--------------------+
...