2017-10-18 9 views
1

안녕하세요, 다음 작업 예제를 위해 Stata의 Mata 프로그래밍 언어에서 도움이 필요합니다.Stata Mata 프로그래밍 준수 오류

치수 600x1 (V 행렬)의 포인터 행렬 안에 치수 (1x200) (임의의 일반 그리기로 생성)의 부분 행렬을 삽입하려고합니다.

mata: 
T=600  //number of markets 
K_S=1 //number of variables with stochastic coefficients 
R=200 //number of random draws 
st_matrix("T", T) 
//pointers to the market specific random draws: 
V=J(T,1,NULL) // T by 1 0 matrix 

for(t=1;t<=T;t++){ 
V[t]=(rnormal(K_S,R,0,1)) //dimension K_S x R 
} 
end 

문제는 내가 "rnormal() : 3200 정합성 오류"를 얻고있다

는 내가 뭘 잘못 제안 할 수 없습니다.

감사

+2

당신의 경우에는'st_matrix ("T", 600)'을 지나갈 수 없습니다. Stata (NB)에 행렬을 생성합니다.이 행렬은 1 x 1이고 상수 600을가집니다. 이것은 XY 문제처럼 보입니다. 한 번에 600 x 200의 행렬이 필요합니까? 그렇다면 직접 제작하지 않으시겠습니까? 포인터가 필요한 이유는 무엇입니까? http://xyproblem.info/ –

답변

1

당신은 열 벡터의 단일 셀에 K_S x R 매트릭스를 할당하려고합니다. 마타에서

mata: 
T = 600 // number of markets 
K_S = 1 // number of variables with stochastic coefficients 
R = 200 // number of random draws 
st_matrix("T", T) 

// pointers to the market specific random draws: 
V = J(T, 1, NULL) // T by 1 0 matrix 

for(t=1; t<=T; t++){ 
    V[t]= &(rnormal(K_S, R, 0, 1)) //dimension K_S x R 
} 
end 

& 표기 포인터를 의미 포인터가 아니라, 할당에 대한 포인터를 가진다.

+0

Mauricio에 감사드립니다. 그래서 나는 교정을 시도했고이 결과를 얻고 있습니다 .. 자료 : V + ------------- + 1 | 0xfa7f240 | 2 | 0xfa81cc0 | 3 | 0xfa80890 | 4 | 0xfa82320 | 5 | 0xfa82980 | 6 | 0xfa82870 | 7 | 0xfa82760 | 8 | 0xfa82210 | 9 | 0xfa81880 | 10 | 0xfa81990 | 11 | 0xfa80670 | 당신은 저에게 무엇을 의미합니까? 나는 600x1의 Column Vector에서 치수 K_SxR의 부분 행렬을 얻을 것이라고 생각했습니다. 내가 뭔가 잘못하고 있는거야? – Ska

+0

@Ska No. 당신은 600 + 1 개체를 만들었습니다. 하나의 600 x 1 벡터와 600 K_S x R 행렬. 포인터는 말 그대로 주소입니다. 따라서 V는 600 개의 주소를 가진 벡터이고 실제 객체는 다른 곳에 있습니다. 어디있어? 예를 들어, V [1]은 "0xfa7f240"이며 이는 메모리에있는 K_SxR 행렬의 주소입니다. * V [1], * V [2] 등을 통해 참조 할 수 있습니다. – Mauricio