我有一个纵向数据集,其中包含每年
重复观察的结果 (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);
我的问题:
- “替换”的语法是否正确?如果不是,如何替换现有变量值而不是创建新变量?
- 如果错误意味着我的变量列表中存在因素 - 如何检测它们?
- 如果没有,如何解决这个问题?
谢谢!
最佳答案
正如 @William Lisowski 所强调的,“ipolate”没有 replace()
选项。任何其语法图不允许的内容都是被禁止的。无论如何,保留原件副本作为审计追踪的一部分肯定值得赞扬。
sort id
quietly ds, has(type numeric)
foreach var in `r(varlist)' {
by id: ipolate `var' year, gen(`var'2)
}
关于time-series - 在 Stata 中插值数值而不创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535410/