我正在使用Stata 14 SE。我有相当长的脚本,利用嵌套循环来生成一些蒙特卡罗数据。在某一点上,循环可能会失败,然后我想要它将一些结果写入一个txt文件,以便我知道它在哪一点失败。如何将Mata值写入txt文件?
为此,我使用以下代码。这部分是在几个其他循环内调用的函数的几个循环内。
if(f_iterations == f_it_max - 1) {
stata(`" display "Price Iteration Failed" "')
st_local("filenumber_ll",filenumber)
st_local("j_ll",strofreal(j))
st_local("filenumber_ll")
st_local("j_ll")
stata(`" display "Filenumber=`filenumber_ll'" "')
stata(`" display "J=`j_ll'" "')
stata(`" file write myfile4 `" Failure in file `filenumber_ll', market `j_ll' "' _n "')
}
而且它在Stata返回以下输出:
Price Iteration Failed
001
2
Filenumber=
J=
正如你所看到的Stata看到“filenumber_ll”和“j_ll”的价值,但拒绝显示它并写入文件。
顺便说一句我也是在一个独立的代码尝试这些命令:
mata
j=5
filenumber="filenumber"
filenumber
st_local("j_ll",strofreal(j))
st_local("filenumber_ll",filenumber)
stata(`" display "Filenumber=`filenumber_ll'" "')
stata(`" display "J=`j_ll'" "')
stata(`" file open myfile25 using `"!test.txt"', write replace "')
stata(`" file write myfile25 `"Failure in file `filenumber_ll', market `j_ll'"' _n "')
stata(`" file close myfile25 "')
end
,然后我收到这样的输出:
filenumber
Filenumber=filenumber
J=5
所以它似乎工作。
我不明白为什么它在独立文件中工作,但不在循环中。任何帮助?
马特,谢谢你的非常详细的答案。我现在明白它好多了。同时我将循环内容放在另一个do-file中,然后在循环中调用它。在这种情况下,宏似乎会随着每次迭代而更新,并做我想做的事情。但是你的解决方案更加优雅。再次感谢你!我花了好几天的时间试图找出答案。 – Odysseus56