For loop 斯塔塔:为什么我的矩阵没有清除foreach循环
当我运行以下代码时,两个输出矩阵(diffInDiffOne和diffInDiffTwo)是相同的。我的猜测是,系数并没有在每次循环后被替换,但我不知道为什么。我认为系数矩阵正在被覆盖,但我不知道如何覆盖。我尝试更改for循环顺序,但这也未能解决我的问题:For loop 斯塔塔:为什么我的矩阵没有清除foreach循环,for-loop,regression,stata,For Loop,Regression,Stata,当我运行以下代码时,两个输出矩阵(diffInDiffOne和diffInDiffTwo)是相同的。我的猜测是,系数并没有在每次循环后被替换,但我不知道为什么。我认为系数矩阵正在被覆盖,但我不知道如何覆盖。我尝试更改for循环顺序,但这也未能解决我的问题: local treatments treat_one treat_two matrix diffInDiffOne = J(1,9,.) matrix diffInDiffTwo = J(1,9,.) foreach treatment i
local treatments treat_one treat_two
matrix diffInDiffOne = J(1,9,.)
matrix diffInDiffTwo = J(1,9,.)
foreach treatment in `treatments' {
reg science inSchool#`treatment'#male
matrix coeffs=e(b)
if treat_one==`treatment'{
matrix diffInDiffOne = diffInDiffOne\coeffs
}
if treat_two==`treatment'{
matrix diffInDiffTwo = diffInDiffTwo\coeffs
}
}
matrix list diffInDiffOne
matrix list diffInDiffTwo
当我列出矩阵时,它们都是相同的,这说明两个回归给出了不同的答案。在此问题上的任何帮助都将不胜感激。谢谢此代码乍一看就显示为
reg science inSchool#treat_one#male
matrix li e(b)
reg science inSchool#treat_two#male
matrix li e(b)
除了向矩阵中添加九个缺失值的细节之外
然而,这不是你的代码,那么是什么在咬你呢?我猜是更微妙的事情
您应该非常小心使用if
命令。如果命令在第一次观察中进行评估,则在中评估变量。所以,第一次循环
条件是
if treat_one[1] == treat_one[1]
if treat_two[1] == treat_one[1]
第二次是
if treat_one[1] == treat_two[1]
if treat_two[1] == treat_two[1]
如果在您的数据中,treat_one[1]==treat_two[1]
的效果将与您想象的不同
如果要测试字符串的相等性,请执行以下操作
if "`treatment'" == "treat_one"
你可能会想到更像
foreach treatment in treat_one treat_two {
reg science inSchool#`treatment'#male
matrix `treatment' = e(b)
matrix list `treatment`
}
您似乎想要为相当简单的问题编写非常复杂的代码。不久前,我建议从do文件而不是程序的角度来考虑。这可能是重新考虑的建议 很抱歉在您的签名后添加数字。我试着做一个装饰性的编辑,现在不能忽略它们。Steven通过MWE显示实际结果会对这个问题有所帮助。还有一个不相关的问题,在学校##'治疗'#男性
只适合三方互动。如果这是一个差异中的差异(DID)模型,那么还需要主要影响和双向互动。也许你的意思是。
。请参阅“因子变量”的帮助。我遇到的if问题肯定与比较值而不是字符串有关。我希望能够将矩阵输出到excel文档中,这就是我尝试将输出保存到矩阵中的原因。我使用了您将矩阵保存为'treatment'的方法,但是在下一个for循环覆盖信息之前,我仍然需要找到一种保存信息的方法。我可以把它添加到另一个矩阵中,但这看起来很笨重。感谢您的帮助。您可能可以直接使用存储的结果,而不是保存新的矩阵。如果您使用的是Stata 13,请利用putexcel
;阅读帮助Excel
。这里还有一个不错的博客条目:。如果您使用的是Stata<13,请阅读help export
,了解一些备选方案。另请参见用户编写的命令estout
(SSC的Ben Jann)和tabout
(SSC的Ian Watson)。使用ssc description
查看这些问题。我重点关注我认为是您的错误。但是,从大的角度来看问题,Stata矩阵并不声称是多用途表,您最好看看以前的程序,例如@RobertoFerrer命名的程序。