2012-11-27 2 views
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 

미리 감사드립니다.

답변

2

끝 부분에 별도의 블록에 마타 코드를 넣어야합니다.

도식적으로

, 또한

program 

end 

mata: 

end 

는 공식 명령의 이름 프로그램 이름 test을 사용하지 마십시오. 또한

이 올바른 철자 STATA 마타위한

http://www.stata.com/support/faqs/resources/statalist-faq/#spell

참조.

+0

답장을 보내 주셔서 감사합니다. 이렇게하면 마타 코드가 나중에 나올지라도 Stata 프로그램 내의 로컬'lambda_c' (마타 코드에서 찾을 수 있습니다)를 호출 할 수 있습니까? 'test'라는 이름에 관해서는, 제가 여기 사용했던 것입니다 만, 고마워요. –

+0

예. 요점은이 코드가 단지 프로그램을 정의한다는 것입니다. 프로그램을 실행하기 전에 전체 프로그램을 정의해야합니다. 첫 번째로 오는 것은 실제로 중요하지 않습니다. 단, '끝'은 이전의 오프너를 참조해야한다는 문제를 제외하고는 중요하지 않습니다. 즉, 나는이 프로그램이 무엇을 할 것인지 이해하지 못한다. 그러나 Mata 함수가 호출되기 전에'lambda_c'를 정의 할 필요가 없다. –

+0

고맙습니다. 이것은 정말 좋은 대답입니다. 그래서 당신이 말하는 것은'lambda_c'를 어디에서든지 정의 할 필요가 없으며'st_local ("lambda_c", strofreal (temp))'은'lambda_c'라는 이름의 지역을' 임시? 확인차. –