For loop 斯塔塔:为什么我的矩阵没有清除foreach循环

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

当我运行以下代码时,两个输出矩阵(diffInDiffOne和diffInDiffTwo)是相同的。我的猜测是,系数并没有在每次循环后被替换,但我不知道为什么。我认为系数矩阵正在被覆盖,但我不知道如何覆盖。我尝试更改for循环顺序,但这也未能解决我的问题:

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命名的程序。