使用 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。
考虑以下示例。我从一个 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。