Восстановление последнего доступного наблюдения по статистике страны

Я пытаюсь сохранить только последнее доступное наблюдение для каждой переменной, однако проблема в том, что разные переменные для каждой страны измерялись в разные годы. Мои данные сейчас выглядят так:

iso3c year  Gini          variable1         variable2                variable3
AND   2000       .          1.279314         33                        22
AND   2001      22          2.571869         .                          .
AND   2002       .          3.492054         .                          .
AND   2003      44          3.89996          .                           

Это мой код:

gsort + iso3c - year
drop if Gini==. & variable1==.      &     variable2==.       &       variable3==.
bysort iso3c: keep if _n==1 
drop year

Я попробовал это с одной переменной, как показано ниже, а затем запустил другие строки, и это сработало.

drop if Gini==. 

Однако, поскольку у меня есть разные переменные, измеренные в разные годы для каждой страны, Stata в конечном итоге сохраняет только следующее:

iso3c Gini     variable1            variable2            variable3

AND    44           3.89996          .                   .                               

Однако я хочу что-то вроде этого, где последнее доступное наблюдение для переменных 2 и 3 также сохранено с 2000 года, хотя переменные не были измерены в 2004 году.

iso3c Gini      variable1            variable2                variable3

AND    44           3.89996          33                        22                

person maldini425    schedule 06.12.2020    source источник


Ответы (1)


Обратите внимание, что collapse (lastnm) Gini variable*, by(iso3c) - решение этой проблемы в одну строку.

Покажем также, как получить нечто подобное из первых принципов.

Последнее не пропущенное значение на каждой панели становится доступным после сортировки непропущенных значений до конца панели (временно). Если не пропущенное значение недоступно, вместо него обязательно будет возвращено отсутствующее значение.

clear 
input str3 iso3c year Gini variable1 variable2 variable3
AND 2000 . 1.279314 33 22
AND 2001 22 2.571869 . .
AND 2002 . 3.492054 . .
AND 2003 44 3.89996 . . 
end 

gen OK = . 

foreach v in Gini variable1 variable2 variable3 { 
    replace OK = !missing(`v')
    bysort iso3c (OK year) : gen `v'_lnm = `v'[_N] 
}

sort iso3c year 
list iso3c year *lnm 

     +----------------------------------------------------------+
     | iso3c   year   Gini_lnm   va~1_lnm   va~2_lnm   va~3_lnm |
     |----------------------------------------------------------|
  1. |   AND   2000         44    3.89996         33         22 |
  2. |   AND   2001         44    3.89996         33         22 |
  3. |   AND   2002         44    3.89996         33         22 |
  4. |   AND   2003         44    3.89996         33         22 |
     +----------------------------------------------------------+
person Nick Cox    schedule 07.12.2020