【问题标题】:How to efficiently create lag variable using Stata如何使用 Stata 有效地创建滞后变量
【发布时间】:2015-09-22 22:15:44
【问题描述】:

我有面板数据(时间: 日期,姓名: 代码)。我想为变量 xy 创建 10 个滞后。现在我使用以下代码一一创建每​​个滞后变量:

by ticker: gen lag1 = x[_n-1]

但是,这看起来很乱。

谁能告诉我如何更有效地创建滞后变量?

我应该使用循环还是 Stata 有更有效的方法来处理此类问题?

【问题讨论】:

    标签: stata


    【解决方案1】:

    @Robert 向您展示了简化的操作方式。为了完成,这里是“传统的”,无聊的方式:

    clear
    set more off
    
    *----- example data -----
    
    set obs 2
    
    gen id = _n
    expand 20
    
    bysort id: gen time = _n
    tsset id time
    
    set seed 12345
    gen x = runiform()
    gen y = 10 * runiform()
    
    list, sepby(id)
    
    *----- what you want -----
    
    // "traditional" loop
    forvalues i = 1/10 {
         gen x_`i' = L`i'.x
         gen y_`i' = L`i'.y
    }
    
    list, sepby(id)
    

    还有一个组合:

    // a combination
    foreach v in x y {
        tsrevar L(1/10).`v'
        rename (`r(varlist)') `v'_#, addnumber
    }
    

    如果目的是创建滞后变量以在某些估计中使用它们,请知道您可以直接在许多估计命令中使用时间序列运算符;也就是说,不需要首先创建滞后变量。见help tsvarlist

    【讨论】:

      【解决方案2】:

      您可以循环执行此操作,但您也可以利用tsrevar 生成临时滞后变量。如果需要永久变量,可以使用rename group重命名。

      clear
      set obs 2
      gen id = _n
      expand 20
      bysort id: gen time = _n
      tsset id time
      set seed 12345
      gen x = runiform()
      gen y = 10 * runiform()
      tsrevar L(1/10).x
      rename (`r(varlist)') x_#, addnumber
      tsrevar L(1/10).y
      rename (`r(varlist)') y_#, addnumber
      

      请注意,如果您这样做是为了计算滚动窗口的统计数据,请查看 tsegen(来自 SSC)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多