我有一个纵向数据集,每个 year
都有反复观察( id
1,2,3 ......) . 我有几千种各种类型的变量 . 某些行(由变量 to_interpolate == 1
表示)需要根据前一年和下一年的相同 id
的值对其数值变量进行线性插值(它们为空) .
由于我无法命名所有变量,因此我创建了一个 varlist
的数字变量 . 此外,我不想重新创建数以千计的额外变量,因此我需要替换现有的缺失值 .
到目前为止我做了什么:
quietly ds, has(type numeric)
local varlist `r(varlist)'
sort id year
foreach var of local varlist {
by id: ipolate `var' year replace(`var') if to_interpolate==1
}
无论我做什么,我都会收到一条错误消息:
factor variables and time-series operators not allowed
r(101);
我的问题:
-
'replace'如何正确的语法?如果没有,如何替换现有的变量值而不是创建新的变量?
-
如果错误意味着我的varlist中存在因素 - 如何检测它们?
-
如果没有,怎么解决这个问题?
谢谢!
2 回答
正如@William Lisowski强调的那样,“ipolate”没有
replace()
选项 . 禁止其语法图不允许的任何内容 . 在任何情况下,作为审计线索的一部分,保留原件的副本肯定会受到赞扬 .好的,这是一种解决方法,因为我无法找到
replace
值的方法ipolate
,这对于数千个变量是可行的:这是一个线性插值,适用于单年间隙,但不是连续两年,但就我的目的而言,这已经足够了 . 我会很高兴看到更好的解决方案:)