2
현재 .ata 파일에 약간의 Stata 프로그램을 작성하고 있습니다. 이 .ado 파일 내에서 optimize() 함수를 사용하기 위해 Mata를 사용하고 싶습니다. 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
미리 감사드립니다.
답장을 보내 주셔서 감사합니다. 이렇게하면 마타 코드가 나중에 나올지라도 Stata 프로그램 내의 로컬'lambda_c' (마타 코드에서 찾을 수 있습니다)를 호출 할 수 있습니까? 'test'라는 이름에 관해서는, 제가 여기 사용했던 것입니다 만, 고마워요. –
예. 요점은이 코드가 단지 프로그램을 정의한다는 것입니다. 프로그램을 실행하기 전에 전체 프로그램을 정의해야합니다. 첫 번째로 오는 것은 실제로 중요하지 않습니다. 단, '끝'은 이전의 오프너를 참조해야한다는 문제를 제외하고는 중요하지 않습니다. 즉, 나는이 프로그램이 무엇을 할 것인지 이해하지 못한다. 그러나 Mata 함수가 호출되기 전에'lambda_c'를 정의 할 필요가 없다. –
고맙습니다. 이것은 정말 좋은 대답입니다. 그래서 당신이 말하는 것은'lambda_c'를 어디에서든지 정의 할 필요가 없으며'st_local ("lambda_c", strofreal (temp))'은'lambda_c'라는 이름의 지역을' 임시? 확인차. –