Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time series 在Stata中插入数值而不创建新变量_Time Series_Interpolation_Stata - Fatal编程技术网

Time series 在Stata中插入数值而不创建新变量

Time series 在Stata中插入数值而不创建新变量,time-series,interpolation,stata,Time Series,Interpolation,Stata,我有一个纵向数据集,每个年都有重复观察(id1,2,3…)。我有数千个各种类型的变量。某些行(由变量to_interpolate==1表示)需要根据上一年和下一年相同id的值对其数值变量进行线性插值(它们为空) 因为我不能命名所有变量,所以我创建了一个数值变量的varlist。此外,我不想重新创建数千个额外的变量,因此我需要替换现有缺少的值 到目前为止我所做的: quietly ds, has(type numeric) local varlist `r(varlist)' sort id y

我有一个纵向数据集,每个
年都有重复观察(
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”的语法是否正确?如果没有,如何替换现有变量值而不是创建新变量
  • 如果错误意味着我的变量列表中存在因素-如何检测它们
  • 如果没有,如何解决这个问题

  • 谢谢

    好的,这是一个解决办法,因为我找不到一种方法来用
    iplate
    替换
    值,这种方法适用于数千个变量:

    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
    }
    

    这是一个线性插值法,适用于一年的时间间隔,但不是连续两年,但对于我来说已经足够了。我很高兴看到一个更好的解决方案:)

    正如@William Lisowski所强调的,“iplate”没有
    replace()
    选项。任何语法图不允许的都是禁止的。无论如何,作为审计跟踪的一部分,保留原件的副本肯定是值得推荐的

    sort id 
    quietly ds, has(type numeric)
    
    foreach var in `r(varlist)' {
       by id: ipolate `var' year, gen(`var'2) 
    }
    

    您的错误消息可能是您引用本地宏
    r(varlist)
    var
    的结果,例如
    'var'
    ,它们应该作为
    'var'
    给出-最左边的字符是所谓的“左单引号”出现在我的键盘左上角波浪形字符下方的字符。(从技术上讲,它是ASCII“重音严重”字符。)
    iplate
    命令不包括
    replace()
    选项。因此,请使用3个命令执行此操作。(1) 使用
    iplate`var'…
    生成一个名为temp的新变量;(2)
    replace`var'=temp
    (3)
    drop temp
    @WilliamLisowski(1)左边的“存在于我的代码中,只是在这里转录时不存在”——将修复。(2) 如何检测一个宏,或者为什么它存在于一个只有数字(3)的变量列表中,但是如何使用数千个变量来检测宏?
    不建议使用以下方法来覆盖宏:
    替换'var'='var'2
    。谢谢您的回答。所有的内插值都存在于某一年内,或者以某个变量标记的任何速率(to_interpolate),进行分析不是很麻烦吗?插值为空,因此不需要积压值,并且这些行被标记。在这种情况下,生成数千个额外变量是否明智?谢谢我想你在和自己争论。你的问题说明你必须这样做,我正在解释怎么做。看结果是个好主意还是工作量太大,由你来判断。在第一条评论中,应该是
    drop`var'2