Добавление данных дает неверные результаты - PullRequest
0 голосов
/ 14 октября 2018

У меня есть два набора данных за разные годы, которые я пытаюсь объединить с помощью команды append.Оба включают ряд переменных и личность, идентифицирующую переменную, которая, однако, не идентична.

Набор данных 1:

PID        Year     Car  Sex       Age
420201     2016     0    Female    70
420202     2016     0    Male      87
420204     2016     0    Female    62
420205     2016     1    Female    34
420207     2016     1    Male      48

Набор данных 2:

PID        Year     Car   Sex      Age
420202     2014     1     Male     59
420204     2014     0     Female   76
420205     2014     1     Male     37
420207     2014     1     Male     23

Проблемазаключается в том, что когда я пытаюсь добавить эти наборы данных, Stata создает набор данных, в котором значения некоторых идентификаторов из одного набора данных неправильно передаются идентификаторам другого набора данных.

Приложенный набор данных:

PID        Year     Car   Sex      Age
420201     2016     0     Female   70
420201     2014     1     Male     59
420202     2016     0     Male     87
420202     2014     0     Female   76
420204     2016     0     Female   62
420204     2014     1     Male     37
420205     2016     1     Female   34
420205     2014     1     Male     23
420207     2016     1     Male     48
420207     2014     1     Male     23

Есть ли исправление для этого?

1 Ответ

0 голосов
/ 14 октября 2018

Я уже сталкивался с этой проблемой раньше, и это происходит потому, что PID 'значения', которые вы видите, на самом деле являются ярлыками, прикрепленными к значениям 1, 2, 3, 4, 5.

Чтобы проиллюстрировать этот момент, рассмотрим следующий пример:

clear

input PID Year Car str6 Sex Age
1 2016 0 Female 70
2 2016 0 Male 87
3 2016 0 Female 62
4 2016 1 Female 34
5 2016 1 Male 48
end

label define PID 1 "420201" 2 "420202" 3 "420204" 4 "420205" 5 "420207"
label values PID PID

list
     +------------------------------------+
     |    PID   Year   Car      Sex   Age |
     |------------------------------------|
  1. | 420201   2016     0   Female    70 |
  2. | 420202   2016     0     Male    87 |
  3. | 420204   2016     0   Female    62 |
  4. | 420205   2016     1   Female    34 |
  5. | 420207   2016     1     Male    48 |
     +------------------------------------+

list, nolabel
     +---------------------------------+
     | PID   Year   Car      Sex   Age |
     |---------------------------------|
  1. |   1   2016     0   Female    70 |
  2. |   2   2016     0     Male    87 |
  3. |   3   2016     0   Female    62 |
  4. |   4   2016     1   Female    34 |
  5. |   5   2016     1     Male    48 |
     +---------------------------------+

Следовательно, при попытке append происходит следующее:

clear

input PID Year Car str6 Sex Age
1 2014 1 Male 59
2 2014 0 Female 76
3 2014 1 Male 37
4 2014 1 Male 23
end

label define PID 1 "420202" 2 "420204" 3 "420205" 4 "420207"
label values PID PID

save data2, replace

append using data1

sort PID

list

     +------------------------------------+
     |    PID   Year   Car      Sex   Age |
     |------------------------------------|
  1. | 420202   2014     1     Male    59 |
  2. | 420202   2016     0   Female    70 |
  3. | 420204   2016     0     Male    87 |
  4. | 420204   2014     0   Female    76 |
  5. | 420205   2014     1     Male    37 |
     |------------------------------------|
  6. | 420205   2016     0   Female    62 |
  7. | 420207   2016     1   Female    34 |
  8. | 420207   2014     1     Male    23 |
  9. |      5   2016     1     Male    48 |
     +------------------------------------+

Ваши метки значений, вероятно, определены по-разному, но идея та же.

Для правильного append двух наборов данных сначала необходимо преобразовать PID в строку:

foreach dta in data1 data2 {
    use `dta', clear
    decode PID, generate(PID2)

    drop PID
    rename PID2 PID
    save `dta', replace
}

append using data1

order PID
sort PID

list

     +------------------------------------+
     |    PID   Year   Car      Sex   Age |
     |------------------------------------|
  1. | 420201   2016     0   Female    70 |
  2. | 420202   2016     0     Male    87 |
  3. | 420202   2014     1     Male    59 |
  4. | 420204   2016     0   Female    62 |
  5. | 420204   2014     0   Female    76 |
     |------------------------------------|
  6. | 420205   2016     1   Female    34 |
  7. | 420205   2014     1     Male    37 |
  8. | 420207   2016     1     Male    48 |
  9. | 420207   2014     1     Male    23 |
     +------------------------------------+

Вы также можете использовать команду destring для преобразования новогострока PID переменная в числовое значение.

...