Я уже сталкивался с этой проблемой раньше, и это происходит потому, что 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
переменная в числовое значение.