【问题标题】:Stata: Creating Variables Based on local varlistStata:基于本地 varlist 创建变量
【发布时间】:2021-05-23 16:11:23
【问题描述】:

我有一个如下所示的数据集:

A B
0 1
0 1
0 1
1 0

我想为 t=1,2,3 创建新变量 A't' 和 B't',它们给出过去 1,2 和 3 个周期的 A 和 B 值。我尝试了以下代码,但出现错误:“名称无效。

local status A B
    foreach x of local status {
    forvalues t=1/3 {
        gen "`x'"`t'="`x'"[_n-`t'] if _n>`t'
    }
    }

我想得到的结果如下:

A B  A1 A2 A3 B1 B2 B3
0 1  .  .  .  .  .  .
1 0  0  .  .  1  .  .
0 1  1  0  .  0  1  .
1 0  0  1  0  1  0  1

【问题讨论】:

    标签: stata stata-macros


    【解决方案1】:

    这行得通:

    clear 
    input A B
    0 1
    0 1
    0 1
    1 0
    end 
    
    foreach x in A B { 
        forval t = 1/3 { 
            gen `x'`t' = `x'[_n-`t']
        }
    }
    

    注意事项:

    1. 将两个变量名放入local 只是为了再次取出它们没有害处,否则毫无意义。

    2. 双引号在这种情况下是错误的。

    3. if 限定符不会造成任何伤害,但没有它你会得到相同的结果。

    最关键的是,有经验的 Stata 用户不会这样做。仅当观察按时间顺序或其他顺序顺序进行时,前一个、前两个等值的概念才有意义,在这种情况下,大多数分析都需要一个明确的类时间变量,比如

    gen t = _n 
    

    之后你可以去

    tsset t 
    

    然后滞后变量会自动以L1.A L2.A L3.A 的形式提供,以此类推。

    如果您的真实数据是面板或纵向数据,那么您需要一个标识符以及一个时间变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多