gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:23:22 25 4
gpt4 key购买 nike

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

. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com