Несоответствие типов при замене отсутствующих наблюдений предыдущими значениями с использованием операторов временных рядов в Stata - PullRequest
1 голос
/ 06 августа 2020

Рассмотрим следующий пример. Я начинаю с переменной 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);

Хотя есть несколько способов обойти это (я перечислил два), мне интересно понять, почему это происходит. В большинстве подобных обсуждений рассматриваются случаи, когда задействованы две переменные разного типа, но, очевидно, здесь дело обстоит не так, поскольку задействована только одна переменная.

1 Ответ

1 голос
/ 06 августа 2020

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

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

В дополнение к синтаксису, который вы упомянули stripolate из SS C, поддерживает интерполяцию строк: см. этот поток Statalist .

...