2017-10-18 6 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適合性エラー」を取得していますです

あなたは私が間違っているのものをお勧めでした。あなたが列ベクトルで単一のセルにK_S x R行列を割り当てるしようとしている

おかげ

+2

私はStata(NB)の行列を1 x 1で作成し、定数600を保持しているあなたのケースでは 'st_matrix(" T "、600)'を過去に取得できません。これは私にとってXY問題のように見えます。いつでも600×200の行列が必要ですか?もしそうなら、それを直接作りませんか?なぜポインタが必要ですか? http://xyproblem.info/ –

答えて

1

。マタで

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 No.あなたは600 + 1個のオブジェクトを作成しました。 1つの600×1ベクトルおよび600のK_S×R行列。ポインタは文字通りアドレスです。したがって、Vは600のアドレスを持つベクトルであり、実際のオブジェクトは他の場所にあります。彼らはどこにいる?例えば、V [1]は "0xfa7f240"であり、これはメモリ内のK_SxR行列のアドレスである。 * V [1]、* V [2]などを使用して参照できます。 – Mauricio