我有一个纵向数据集,每个id
都有反复观察(year
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);
我的问题:
谢谢!
答案 0 :(得分:1)
正如@William Lisowski强调的那样,“ipolate'”没有replace()
选项。禁止其语法图不允许的任何内容。在任何情况下,作为审计线索的一部分,保留原件的副本肯定会受到赞扬。
sort id
quietly ds, has(type numeric)
foreach var in `r(varlist)' {
by id: ipolate `var' year, gen(`var'2)
}
答案 1 :(得分:0)
好的,这是一种解决方法,因为我无法找到replace
ipolate
值的方法,quietly ds, has(type double float long int)
local varlist `r(varlist)'
sort id year
foreach var of local varlist {
quietly by id: replace `var' = (`var'[_n-1] + `var'[_n+1])/2 if to_interpolate==1
}
可用于数千个变量:
if(req.headers.hasOwnProperty('token')) {
req.headers.authorization = 'Bearer ' + req.headers.token;
token = req.headers.token;
}
这是一个线性插值,适用于单年间隙,但不是连续两年,但就我的目的而言,这已经足够了。我将很高兴看到更好的解决方案:)