当我运行以下代码时,两个输出矩阵(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
当我列出矩阵它们都是相同的时,表明两个回归给出不同答案的事实。非常感谢您对此问题的任何帮助。感谢
答案 0 :(得分:2)
此代码初看即可缩小为
reg science inSchool#treat_one#male
matrix li e(b)
reg science inSchool#treat_two#male
matrix li e(b)
除了向矩阵添加九个缺失值的细节。
然而,那不是你的代码,那么是什么在咬你?我想更微妙的东西。
您应该对if
命令非常小心。在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文件而不是程序来思考。这可能是重新考虑的建议。