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]
部分,该条件可以按照通常意义进行扩展。非常感谢!。手头有一个替代方法总是很好的!非常感谢!。手头有一个替代方法总是很好的!