2017-10-18 155 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×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。所以我试图纠正,我得到这个结果.. mata:V + ------------- + 1 | 0xfa7f240 | 2 | 0xfa81cc0 | 3 | 0xfa80890 | 4 | 0xfa82320 | 5 | 0xfa82980 | 6 | 0xfa82870 | 7 | 0xfa82760 | 8 | 0xfa82210 | 9 | 0xfa81880 | 10 | 0xfa81990 | 11 | 0xfa80670 |你能告诉我这是什么意思?我以为我会在600x1的列向量中获得维度为K_SxR的子矩阵。难道我做错了什么? – Ska

+0

@Ska号您已创建600 + 1个对象。一个600 x 1矢量和600个K_S x R矩阵。指针只是一个地址,从字面上看。所以V是一个有600个地址的矢量,实际的对象在别的地方。他们在哪?例如,V [1]是“0xfa7f240”,它是存储器中K_S x R矩阵的地址。你可以通过* V [1],* V [2]等来引用它们。 – Mauricio