Stata - 如何创建面板数据中每个 t 都有值的 T 变量

标签 stata

很抱歉,如果我的问题标题不清楚,但很难用一行来概括它。我有一个面板数据集(生成它的代码位于底部):

. xtset id year
       panel variable:  id (strongly balanced)
        time variable:  year, 1 to 3
                delta:  1 unit

. l, sep(3)

     +-----------------+
     | id   year     x |
     |-----------------|
  1. |  1      1   1.1 |
  2. |  1      2   1.2 |
  3. |  1      3   1.3 |
     |-----------------|
  4. |  2      1   2.1 |
  5. |  2      2   2.2 |
  6. |  2      3   2.3 |
     +-----------------+

我想创建变量 x_1x_2x_3,其中 x_j 的值为 每个 idyear j 中的 >x。我可以按如下方式实现它(不追求优雅):

. forv k=1/3 {
  2. capture drop tmp
  3. gen tmp = x if year==`k'
  4. by id: egen x_`k' = mean(tmp)
  5. }
(4 missing values generated)
(4 missing values generated)
(4 missing values generated)

. drop tmp

. l, sep(3)

     +-----------------------------------+
     | id   year     x   x_1   x_2   x_3 |
     |-----------------------------------|
  1. |  1      1   1.1   1.1   1.2   1.3 |
  2. |  1      2   1.2   1.1   1.2   1.3 |
  3. |  1      3   1.3   1.1   1.2   1.3 |
     |-----------------------------------|
  4. |  2      1   2.1   2.1   2.2   2.3 |
  5. |  2      2   2.2   2.1   2.2   2.3 |
  6. |  2      3   2.3   2.1   2.2   2.3 |
     +-----------------------------------+

有没有不用循环的方法?我知道我可以编写一个 program 或一个 ado 文件(自动确定变量名称),但我想知道是否有一些内置命令适合我的目的。

完整的命令在这里。

clear all
set obs 6
gen id = floor((_n-1)/3)+1
by id, sort: gen year = _n
xtset id year
gen x = id+year/10
l, sep(3)
forv k=1/3 {
    capture drop tmp
    gen tmp = x if year==`k'
    by id: egen x_`k' = mean(tmp)
}
drop tmp
l, sep(3)

最佳答案

循环很好。我能为你做的就是缩短你的循环:

clear all
set obs 6
gen id = floor((_n-1)/3)+1
by id, sort: gen year = _n
xtset id year
gen x = id+year/10
l, sep(3)

forv k=1/3 {
    by id: gen x_`k' = x[`k'] 
}

l, sep(3)

其中有一个平衡小组的合理假设。此循环没有做出这样的假设,但您需要循环观察到的年份:

forv year = 1/3 {
    by id: egen X_`year' = total(x / (year == `year'))  
}

另请参阅this discussion ,特别是第 9 节和第 10 节。

您可能还对separate感兴趣,它避免了显式循环,但只能让您到达您想要的位置的一部分。

尽管如此,很难相信您根本需要这些变量。时间序列算子的机制解决了很多问题,而rangestat(SSC)等工具则填补了很多空白。

关于Stata - 如何创建面板数据中每个 t 都有值的 T 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40046099/

相关文章:

r - R中的瓦哈卡分解

r - 相当于 R 中的 Stata 选项卡命令

stata - 删除所有缺失值的变量

latex - 如果子组的 -tabstat- 中缺少值,则省略汇总统计数据

Stata - 从大型数据集中读取有限数量的变量

r - 在 R 中循环遍历列并找到第一个值等于 1

comparison - 与 Stata 中的因子进行字符串比较

r - 创建重叠矩阵

python - 获取 SciPy 分位数以匹配 Stata xtile 函数

undefined - Stata:检查本地宏是否未定义