2013-06-03 2 views
1

У меня огромный набор данных панели (1950-2012).Stata. Как создавать уникальные идентификаторы с использованием меток, если значения являются случайными?

state year income 
    AL 2000 100 
    AK 2001 200 
    AZ 2002 150 
    ... 
    AL 2003 120 
    AK 2004 10 
    AZ 2005 150 
    ... 

Проблема заключается в том, что переменная state может занимать разные значения в разные годы (но метки не меняется!). Например, в 2001 году значение для метки AL равно 10, но в 2003 году значение для метки AL составляет 20.

Как создать уникальный идентификатор, скажем, новую переменную stateID, которая примет целое значение для всех меток AL независимо от года? egen stateID = group(state) не помогает. Есть ли другой путь?

+0

Для «уникальный» читать «отчетливый», как описано в http://www.stata-journal.com/article.html?article=dm0042 Без сомнения, я из шага с большинством здесь , или, по крайней мере, с тегом SO, но уникальные идентификаторы (должны) встречаться только один раз. Unix неправильно поработал с командой 'uniq', возможно, потому, что они собирались для коротких имен, когда это было возможно, и' dist' не будет апеллировать. –

ответ

5

Это требует исследования того, как это произошло, и данные можно доверять ли. Но с точки зрения техники Stata, сначала decode, затем encode снова. Демонстрация:

. set obs 3 
obs was 0, now 3 

. gen numid = _n 

. label define numid 1 "AL" 2 "AL" 3 "AL" 

. label values numid numid 

. list 

    +-------+ 
    | numid | 
    |-------| 
    1. | AL | 
    2. | AL | 
    3. | AL | 
    +-------+ 

. decode numid, gen(strid) 

. list 

    +---------------+ 
    | numid strid | 
    |---------------| 
1. | AL  AL | 
2. | AL  AL | 
3. | AL  AL | 
    +---------------+ 

. encode strid, gen(newnumid) 

. list 

     +--------------------------+ 
     | numid strid newnumid | 
     |--------------------------| 
    1. | AL  AL   AL | 
    2. | AL  AL   AL | 
    3. | AL  AL   AL | 
    +--------------------------+ 

    . list, nolabels 

     +--------------------------+ 
     | numid strid newnumid | 
     |--------------------------| 
    1. |  1  AL   1 | 
    2. |  2  AL   1 | 
    3. |  3  AL   1 | 
     +--------------------------+ 
-1

Попробуйте это:

egen stateID = group(state), label 
+1

Насколько я знаю, это создаст отдельные группы для 'AL == 10' и' AL == 20'. –

+0

Благодарим вас за ответ, но он как-то не работает – CHEBURASHKA

+0

@Fr. верно. Это не сработает. –

 Смежные вопросы

  • Нет связанных вопросов^_^