2015-08-07 3 views
0

Я изучаю stata и пытаюсь понять слияние. Может кто-нибудь объяснить разницу между различными видами слияния со мной? (1: 1, 1: m, m: 1, m: m).Как объединить данные в stata

+4

Команда 'merge' широко описаны в Data-Management Reference Manual Stata доступна из пункта Документация PDF в меню Справка STATA в. –

ответ

1

В случае, если Stata manual неясно, вот краткий обзор.

Во-первых, важно прояснить терминологию.

merge основном соединяет строки в двух наборах данных (Stata называет их observations) на основе заданной переменной или список переменных, называемых key переменных. Вы должны начать с одного набора данных уже в памяти (Stata называет это набор данных master), и вы получаете merge другой набор данных (другой набор данных называется набором данных using). Остается только один набор данных, содержащий все переменные из master и любую переменную из using, которая еще не существует в master. Он также генерирует новую переменную с именем _merge, указывающую, были ли строки в master, которые не были в using или наоборот. Объединенный набор данных (если не указано иное) будет содержать все строки от master и using, независимо от того, совпадают ли ключевые переменные между ними.

Важное значение имеет понятие «уникальный идентификатор». Если переменная (или комбинация переменных) имеет различное значение в каждой строке, она однозначно идентифицирует строки. Это важно для деталей около 1: 1, 1: м и т. Д.

  • 1: 1 означает, что ключевая переменная предоставляет уникальные идентификаторы в обоих наборах данных. Вы останетесь со всеми строками из обоих наборов данных в памяти.
  • 1: m означает, что ключевая переменная в наборе данных master однозначно идентифицирует строки, но ключевая переменная из набора данных using этого не делает. Вы все равно останетесь со всеми строками из обоих наборов данных, но если ключевая переменная имеет повторяющиеся наблюдения в используемом наборе данных, набор данных master получит дубликаты для их соответствия.
  • m: 1 - это противоположность 1: m. Ключевая переменная в наборе данных master не однозначно идентифицирует строки, но ключевая переменная в наборе данных using.
  • m: m является довольно странным. Ключевая переменная не однозначно идентифицирует строки в любом наборе данных, поэтому вы будете иметь дублированные строки с обеих сторон.

Пример:

** make a dataset and save as a tempfile called `b'. Note that k uniquely identifies rows 
set obs 3 
gen k = _n 
gen b = "b" 
list 
    +-------+ 
    | k b | 
    |-------| 
1. | 1 b | 
2. | 2 b | 
3. | 3 b | 
    +-------+ 

tempfile b 
save `b' 

** make another dataset and merge `b' to it. Note that k uniquely identifies rows 

set obs 3 
gen k = _n 
gen a = "a" 
list 
    +-------+ 
    | k a | 
    |-------| 
1. | 1 a | 
2. | 2 a | 
3. | 3 a | 
    +-------+ 

merge 1:1 k using `b' 
list 
    +-------------------------+ 
    | k a b  _merge | 
    |-------------------------| 
1. | 1 a b matched (3) | 
2. | 2 a b matched (3) | 
3. | 3 a b matched (3) | 
    +-------------------------+ 


** make another dataset and merge `b' to it. Note that k does not uniquely identify rows and that k=2 and k=3 do not exist in the master dataset 
clear 
set obs 3 
gen k = 1 
gen a = "a" 
list 
    +-------+ 
    | k a | 
    |-------| 
1. | 1 a | 
2. | 1 a | 
3. | 1 a | 
    +-------+ 
merge m:1 k using `b' 
list 
    +----------------------------+ 
    | k a b   _merge | 
    |----------------------------| 
1. | 1 a b  matched (3) | 
2. | 1 a b  matched (3) | 
3. | 1 a b  matched (3) | 
4. | 2  b using only (2) | 
5. | 3  b using only (2) | 
    +----------------------------+ 
Смежные вопросы