Ошибка в изменении длинных нескольких переменных
Мне пришлось reshape
мой набор данных от широкого до длинного. У меня есть 500 переменных, которые варьируются от 2016 до 2007 года и записываются как abcd2016
и так далее. Мне нужна процедура, которая позволила мне reshape
без записи всех имен переменных и я запускаю:
unab vars : *2016
local stubs16 : subinstr local vars "2016" "", all
unab vars : *2015
local stubs15 : subinstr local vars "2015" "", all
и так далее, то:
reshape long `stubs16' `stubs15' `stubs14' `stubs13' `stubs12' `stubs11' `stubs10' `stubs09' `stubs08' `stubs07', i(id) j(year)
но я получаю ошибку
invalid syntax
r(198);
Зачем? Можете ли вы помочь мне исправить это?
1 ответ
Решение
Идея состоит в том, чтобы просто указать заглушку при преобразовании в длинный формат. Для этого вам нужно удалить часть года из имени переменной и сохранить уникальные заглушки в локальном каталоге, которые вы можете передать для изменения формы:
/* (1) Fake Data */
clear
set obs 100
gen id = _n
foreach s in stub stump head {
forvalues t = 2008(1)2018 {
gen `s'`t' = rnormal()
}
}
/* (2) Get a list of stubs and reshape */
/* Get a list of variables that contain 20, which is stored in r(varlist) */
ds *20*
/* remove the year part */
local prefixes = ustrregexra("`r(varlist)'","20[0-9][0-9]","")
/* remove duplicates from list */
local prefixes: list uniq prefixes
reshape long `prefixes', i(id) j(t)
Это сохранит числовой суффикс в переменной с именем t.