使用 Stata 中的时间序列运算符将缺失的观察值替换为以前的值时类型不匹配

Type mismatch when replacing missing observations with previous values using time-series operators in Stata

考虑以下示例。我从一个 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 to fill in the missing string identifier. Or, based on the related Stata FAQ 之类的东西和时间序列 varlists 的文档 (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 returns:

type mismatch
r(109);

虽然有多种方法可以解决这个问题(我列出了两个),但我很想了解为什么会发生这种情况。大多数类似的讨论都涉及涉及两个不同类型变量的情况,显然这里不是这种情况,因为只涉及一个变量。

Stata 不允许将时间序列运算符应用于字符串变量。如果您考虑一下,您会发现前一个(滞后)和后一个(前导)字符串值是有意义的,但差别不大,至少差别不大。差异的唯一简单解释是二元的,即两次的字符串相同或不同。

因此,Stata 并不意味着您不能为任何面板使用其他字符串值;它只是不支持使用时间序列运算符对字符串进行计算。

除了您提到的 stripolate 语法之外,SSC 还支持字符串插值:请参阅 this Statalist thread