If statement 使用if命令计算stata中的差异

If statement 使用if命令计算stata中的差异,if-statement,stata,If Statement,Stata,我想计算一下 by group: egen x if y==1 - x if y==2 当然这不是真正的stata代码,但我有点迷路了。在R中,这只是通过intrest变量后面的“[]”传递,但我不确定stata R应该是 x[y==1] - x[y==2] 我会使用重塑 clear version 11.2 set seed 2001 * generate data set obs 100 generate y = 1 + mod(_n - 1, 2) generate x = rnor

我想计算一下

by group: egen x if y==1 - x if y==2
当然这不是真正的stata代码,但我有点迷路了。在R中,这只是通过intrest变量后面的“[]”传递,但我不确定stata

R应该是

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

我会使用
重塑

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

我也会在R中使用
重塑
。否则,你能确保所有的东西都被正确地安排好,让你得到你想要的不同吗


可能有一个简洁的Mata解决方案,但我对Mata知之甚少。如果您不喜欢
重塑
,您可能会发现
保留
恢复
很有帮助。

我会使用
重塑

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

我也会在R中使用
重塑
。否则,你能确保所有的东西都被正确地安排好,让你得到你想要的不同吗


可能有一个简洁的Mata解决方案,但我对Mata知之甚少。如果你不喜欢
重塑
的话,你可能会发现
保留
恢复
很有帮助。

理查德·赫伦(Richard Herron)提出了一个很好的观点,那就是对不同的结构进行
重塑
可能是值得的。在这里,我将重点介绍如何利用现有的结构来实现这一点

假设
的每组有两个观察值,一个是
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
命令忽略这些值。因此,上述三个命令中的第一个命令对于
y==1
的观测值产生
x
的平均值,第二个命令对于
y==2
的观测值产生
x
的平均值。
y
的其他值(甚至缺失)将被忽略。当第一种方法有效时,该方法应与第一种方法一致

有关类似问题的回顾,请参阅


在Stata中,此处提到的
if
是一个限定符(不是命令)

理查德·赫伦(Richard Herron)提出了一个很好的观点,即对不同的结构进行
重塑可能是值得的。在这里,我将重点介绍如何利用现有的结构来实现这一点

假设
的每组有两个观察值,一个是
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
命令忽略这些值。因此,上述三个命令中的第一个命令对于
y==1
的观测值产生
x
的平均值,第二个命令对于
y==2
的观测值产生
x
的平均值。
y
的其他值(甚至缺失)将被忽略。当第一种方法有效时,该方法应与第一种方法一致

有关类似问题的回顾,请参阅


在Stata中,此处提到的
if
是一个限定符(不是命令)

嘿,虽然做了一些工作,但还是很好,谢谢。斯塔塔和我还没到那里:)。在R中,我使用
subset
grep
来获得子集,然后通常毫无疑问,这个差异是正确的。在这种特殊情况下,这将是非常容易的,因为我可以将它减去向量:
ju]-x[j][y>u]
。如果我们在
grep
中添加一个条件,则可以省略
[y>u]
部分,该条件可以按照通常的意义进行扩展。嘿,虽然做了一些工作,但还是很感谢。斯塔塔和我还没到那里:)。在R中,我使用
subset
grep
来获得子集,然后通常毫无疑问,这个差异是正确的。在这种特殊情况下,这将是非常容易的,因为我可以将它减去向量:
ju]-x[j][y>u]
。如果我们在
grep
中添加一个条件,则可以省略
[y>u]
部分,该条件可以按照通常意义进行扩展。非常感谢!。手头有一个替代方法总是很好的!非常感谢!。手头有一个替代方法总是很好的!