сравнение команд слияния между R и Stata - PullRequest
8 голосов
/ 07 сентября 2011

Будучи пользователем R, я изучаю Stata, используя этот ресурс, и озадачен командой merge.

В R мне не нужно беспокоиться онеправильно объединять данные, потому что все равно сливается.Мне не нужно беспокоиться, если общие столбцы содержат дубликаты, потому что Y фрейм данных будет сливаться с каждой дублирующейся строкой в ​​X фрейме данных.(используя all=FALSE в merge)

Но для Stata мне нужно удалить повторяющиеся строки из X, прежде чем приступить к слиянию.

Предполагается ли в Stata, чтодля продолжения merge общий столбец в основной таблице должен быть уникальным?

Ответы [ 2 ]

6 голосов
/ 07 сентября 2011

Ответ на ваш вопрос - Нет. Я попытаюсь объяснить, почему.

Упомянутая вами ссылка охватывает только один тип слияния, который возможен в Stata, а именно слияние «один ко многим».

merge 1:m varlist using filename

Возможны другие типы слияния:

Слияние «один к одному» по указанным ключевым переменным

merge 1:1 varlist using filename

Слияние многие-к-одному по указанным ключевым переменным

merge m:1 varlist using filename

Слияние многие-ко-многим по указанным ключевым переменным

merge m:m varlist using filename

Слияние один к одному по наблюдениям

merge 1:1 _n using filename

Подробности, объяснения и примеры можно найти в help merge.

Если вы не знаете, являются ли наблюдения уникальными в наборе данных, вы можете выполнить следующую проверку:

bysort idvar: gen N = _N

ta N

Если вы найдете значения N, которые больше 1, вы знаете, что наблюдения не являются уникальными в отношении idvar.

Фактически это новый синтаксис команды merge, который был представлен в Stata 11. До Stata 11 команда merge была немного проще.Вам просто нужно было отсортировать данные, и тогда вы могли бы сделать:

merge varlist using filename

Кстати, вы все еще можете использовать этот старый синтаксис в Stata 11 или выше.

0 голосов
/ 05 июня 2015

joinby, unmatched (оба) - это команда, которая соответствует команде R merge.

В частности, слияние m: m НЕ выполняет слияние многих со многими (то есть полное объединение) вопреки тому, что подразумевается в документации.

...