2
我目前正在一個.ado文件中寫一個小Stata程序。在這個.ado文件中,我想使用Mata來使用optimize()函數。當我輸入end
以退出MATA時,.ado文件將此讀作程序結束(我認爲)。我如何去做這件事?我對Stata和Mata都非常陌生,特別是他們同時使用它們。這裏是我的代碼示例:馬塔在.ado文件
program define test
args epv prev0 prev1 sample_size bin_prev rep
local prevdiff=`prev1'-`prev0'
local t=-log(1-`prev0')
local eventprob=`epv'/`sample_size'
local lambda_c=0.5
local lambda_0=1
local lambda_1=-log(1-`prev0'-`prevdiff')/`t'
mata
mata clear
void cens_func(todo, x, y, g, H)
{
y = "some function of x and the locals"
}
S = optimize_init()
optimize_init_evaluator(S, &cens_func())
optimize_init_which(S, "min")
optimize_init_params(S, 1)
temp=optimize(S)
st_local("lambda_c",strofreal(temp))
end
some Stata code here
end
在此先感謝。
感謝您的回覆。通過這樣做,即使Mata代碼之後出現,我是否能夠在Stata程序中調用本地的'lambda_c'(我在Mata代碼中找到)?關於名稱'測試',這只是我在這裏用過的東西,但是謝謝:) –
是的。關鍵是這個代碼只是定義了一個程序。整個程序需要在運行之前進行定義。實際上首先是非物質的,除了你發現'end'需要引用前一個開叫者的問題。也就是說,我不明白這個程序會做什麼,但是在調用Mata函數之前定義'lambda_c'沒有意義(也沒有傷害)。 –
非常感謝。這真是一個很好的答案。所以你說的是,我不需要在任何地方定義'lambda_c',並且'st_local(「lambda_c」,strofreal(temp))'將會創建一個名爲'lambda_c'的本地值, temp'?只是要確定。 –