【发布时间】:2017-08-06 18:46:44
【问题描述】:
我有一个纵向数据集,每个 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);
我的问题:
- “替换”的语法如何正确?如果没有,如何替换现有变量值而不是创建新变量?
- 如果错误意味着我的 varlist 中存在因素 - 如何检测它们?
- 如果没有,如何解决?
谢谢!
【问题讨论】:
-
您的错误消息可能是您对本地宏
r(varlist)和var的引用的结果,例如'var'应该将它们作为`var'给出 - 最左边的字符是所谓的“左单引号”字符出现在我的键盘上左上角波浪字符下方。 (从技术上讲,它是 ASCII “重音”字符。) -
ipolate命令不包括replace()选项。所以用3个命令来做。 (1)使用ipolate `var' ...生成一个名为temp的新变量; (2)replace `var' = temp(3)drop temp. -
@WilliamLisowski (1) 左边的 ` 存在于我的代码中,只是在此处转录时不存在 - 将修复。 (2) 如何检测一个宏或为什么它存在于一个只有数字的 varlist 中 (3) 但是你如何使用数千个变量来做到这一点?
标签: time-series interpolation stata