Как изменить данные несколькими способами в Stata? - PullRequest
0 голосов
/ 30 января 2020

Я работаю с набором данных, охватывающим несколько стран, переменных и лет. В настоящее время он организован так: (на самом деле ~ 30 лет и 5 разных переменных для каждой страны):

country measure yr1995 yr1996 yr1997
USA A 5 4 1
USA B 1 2 1
USA C 0 4 2
UK A 2 4 9
UK B 2 8 4
UK C 2 4 1

Я хотел бы, чтобы данные были перегруппированы так долго:

country year A B C
USA 1995 5 1 0
USA 1996 4 2 4
USA 1997 1 1 2
UK 1995 2 2 2
UK 1996 4 8 4
UK 1997 9 4 1

Я пытался использовать reshape long yr, i(country) j(year), но получаю следующее сообщение об ошибке:

variable id does not uniquely identify the observations
    Your data are currently wide.  You are performing a reshape long.  You specified i(country) and j(year).  In
    the current wide form, variable country should uniquely identify the observations.

Я думаю, это потому, что country не единственная длинная переменная? (measure также есть?)

Помимо исправления этой проблемы и организации длинных, а не широких лет, я не думаю, что эта команда выполнит sh другую задачу перемещения различных переменных (A, B, C) в широкоформатный формат в качестве заголовков столбцов.

Нужно ли для этого использовать отдельную команду reshape wide? Или есть какой-то способ расширить команду, чтобы сделать оба сразу?

1 Ответ

1 голос
/ 30 января 2020

Это двойной reshape. По крайней мере, так можно сделать; и, кроме того, это кажется важным, потому что годы должны быть длинными, а не широкими, а меры должны быть широкими, а не длинными, поэтому есть варианты обеих проблем.

Экономи c данные о разработке часто поступают так. Действительно, эта проблема привела к появлению как минимум одной специальной статьи в журнале Stata Journal, но видимой для всех .

Ваш пример данных полезен и почти сразу же полезен, но, пожалуйста, прочитайте тег Stata и help dataex (при необходимости сначала установите dataex, используя ssc install dataex).

См. Также этот FAQ , который включает в себя некоторые советы, помимо справки Stata и ручного ввода.

A search reshape в Stata указывал бы на эти ресурсы.

clear
input str3 country str1 measure yr1995 yr1996 yr1997
USA A 5 4 1
USA B 1 2 1
USA C 0 4 2
UK A 2 4 9
UK B 2 8 4
UK C 2 4 1
end 

reshape long yr, i(country measure) j(year) 

reshape wide yr, i(country year) j(measure) string 

rename (yr*) * 

list, sepby(country)

     +----------------------------+
     | country   year   A   B   C |
     |----------------------------|
  1. |      UK   1995   2   2   2 |
  2. |      UK   1996   4   8   4 |
  3. |      UK   1997   9   4   1 |
     |----------------------------|
  4. |     USA   1995   5   1   0 |
  5. |     USA   1996   4   2   4 |
  6. |     USA   1997   1   1   2 |
     +----------------------------+
...