Рассмотрим следующий пример. Я начинаю с переменной str6
'name' и года для двух объектов, наблюдаемых через год.
clear
input str6 nameStr year
"A" 2002
"A" 2004
"A" 2006
"B" 2002
"B" 2004
"B" 2006
end
Затем я использую tsfill
для балансировки панели:
egen id = group(nameStr)
xtset id year
tsfill
Теперь набор данных:
input str6 nameStr year id
"A" 2002 1
"" 2003 1
"A" 2004 1
"" 2005 1
"A" 2006 1
"B" 2002 2
"" 2003 2
"B" 2004 2
"" 2005 2
"B" 2006 2
end
Теперь я мог бы использовать что-то вроде xfill
, чтобы заполнить отсутствующий строковый идентификатор. Или, основываясь на соответствующем Stata FAQ и документации для списков переменных временных рядов (help tsvarlist
), я ожидаю, что что-то вроде следующего заполнит значения nameStr
:
sort id year \\ not required because the data are still sorted from xtset and tsfill
replace nameStr = nameStr[_n-1] if mi(nameStr) & id[_n-1] == id
, и это так.
Однако я также ожидаю, что следующее будет иметь такое же поведение, но это не так.
replace nameStr = l.nameStr if mi(nameStr)
Вместо этого Stata возвращает:
type mismatch
r(109);
Хотя есть несколько способов обойти это (я перечислил два), мне интересно понять, почему это происходит. В большинстве подобных обсуждений рассматриваются случаи, когда задействованы две переменные разного типа, но, очевидно, здесь дело обстоит не так, поскольку задействована только одна переменная.