Сгенерировать переменную на основе самого последнего ввода / наблюдения

#stata #data-wrangling

#stata #перебор данных

Вопрос:

В настоящее время мои данные организованы в Stata следующим образом:

 input str2 Country gdp_2015  gdp_2016  gdp_2017  imports_2016  imports_2017   exports_2016
"A"         11        12        13       5             6                 8               5 
"B"         11         .        .        5             6                 10               5 
"C"        12          13       .        5             6                  8               5 
end 
  
 gen net_imports = (imports_2017-foodexport_2017)
  
 gen net_imports_toGDP = (net_imports/gdpcurrent_2017)
  

Код работает хорошо, но создает переменную только в том случае, если у страны есть данные за 2017 год, но я хотел бы по существу создать отношение импорта к ВВП на основе самых последних доступных наблюдений для ВВП.

Ответ №1:

Вы можете просто заменить недостающие данные следующим образом:

 replace gdp_2016 = gdp_2015 if mi(gdp_2016)
replace gdp_2017 = gdp_2016 if mi(gdp_2017)
  

Однако более общий подход должен начинаться с преобразования ваших данных из широких в длинные:

 reshape long gdp_ imports_ exports_, i(Country) 
  

help reshape Подробнее см. в команде. gdp_ Etc. — это заглушки, которые будут именами новых переменных и i(Country) задают идентификатор.

Затем вы можете заполнить вперед в каждом наблюдении, используя переменные временных рядов:

 encode Country, generate(Country_num
xtset Country_num _j
replace gdp_=l.gdp_ if mi(gdp_) amp; !mi(l.gdp_)
  

Комментарии:

1. Обратите внимание, что я делаю некоторые предположения о вашем фактическом наборе данных, поскольку описание данных неполное.

2. Я добавил информацию о команде reshape для справки.

3. reshape long Здесь действительно настоятельно рекомендуется использовать A .