Stata:基于本地变量列表创建变量

问题描述

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

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

解决方法

这有效:

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 等使用。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...