0

我想计算类似的东西

by group: egen x if y==1 - x if y==2

当然,这不是一个真正的 stata 代码,但我有点迷路了。在 R 中,这只是由 intrest 变量后面的“[]”传递,但我不确定 stata

R将是

x[y==1] - x[y==2]
4

2 回答 2

2

我会用reshape.

clear
version 11.2
set seed 2001

* generate data
set obs 100
generate y = 1 + mod(_n - 1, 2)
generate x = rnormal()
generate group = 1 + floor((_n - 1) / 2)
list in 1/10

* reshape to wide and difference
reshape wide x, i(group) j(y)
generate x_diff = x1 - x2
list in 1/5

我也会reshape在 R 中使用。否则,您能否确定一切都已妥善订购,以提供您想要的差异?

可能有一个简洁的 Mata 解决方案,但我对 Mata 知之甚少。如果您不喜欢ing ,您可能会发现preserve并有所帮助。restorereshape

于 2013-01-23T14:37:24.503 回答
2

Richard Herron 提出了一个很好的观点,即reshape一个不同的结构可能是值得的。在这里,我将重点介绍如何使用现有结构来做到这一点。

假设每组 恰好有两个观测值group,一个与y == 1,一个与y == 2,则

bysort group (y) : gen diff = x[1] - x[2] 

给出 的值之间的差异x,对于一组中两个的每次观察都必须重复. 无假设方法是

bysort group: egen mean_1 = mean(x / (y == 1)) 
by group: egen mean_2 = mean(x / (y == 2)) 
gen diff = mean_1 - mean_2 

考虑诸如 的表达式x / (y == 1)y == 1当 y 确实为 1 时,分母为 1,否则为 0。除以 0 会在 Stata 中产生缺失,但egen此处的命令会忽略这些。因此,上述三个命令中的第一个命令产生x观察结果y == 1的平均值,第二个命令产生x观察结果的平均值y == 2y(甚至缺失)的其他值将被忽略。当第一种方法有效时,该方法应与第一种方法一致。

有关类似问题的回顾,请参阅http://stata-journal.com/article.html?article=dm0055

在 Stata 中if,这里提到的是限定符(不是命令)。

于 2013-01-23T17:02:03.137 回答