我想计算类似的东西
by group: egen x if y==1 - x if y==2
当然,这不是一个真正的 stata 代码,但我有点迷路了。在 R 中,这只是由 intrest 变量后面的“[]”传递,但我不确定 stata
R将是
x[y==1] - x[y==2]
我想计算类似的东西
by group: egen x if y==1 - x if y==2
当然,这不是一个真正的 stata 代码,但我有点迷路了。在 R 中,这只是由 intrest 变量后面的“[]”传递,但我不确定 stata
R将是
x[y==1] - x[y==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
并有所帮助。restore
reshape
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 == 2
。y
(甚至缺失)的其他值将被忽略。当第一种方法有效时,该方法应与第一种方法一致。
有关类似问题的回顾,请参阅http://stata-journal.com/article.html?article=dm0055
在 Stata 中if
,这里提到的是限定符(不是命令)。