使用列名称对矩阵的列进行子集化

时间:2015-09-21 19:52:52

标签: matrix subset stata

对不起,如果这是一个基本问题,但我无法找到任何解决方案,无论是在这里还是在Stata手册上(第14章," Matrix表达式")。 / p>

我的目标是使用列名称对矩阵进行子集化。 我的初始矩阵A如下所示:

mat A = (1,2,3\4,5,6\7,8,9)
mat rownames A = "row a" "row b" "row c"
mat colnames A = "col x" "col y" "col z"

mat list A

我需要使用列名col xcol z创建由第一列和最后一列组成的矩阵。 "最接近"我能够表现的是:

mat B = A[.,"col x".."col z"]

这显然是错误的。任何其他尝试都会导致仅由第一列组成的矩阵B。 我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

一种方法是:

mat A = (1,2,3\4,5,6\7,8,9)
mat rownames A = "row a" "row b" "row c"
mat colnames A = "col x" "col y" "col z"
matrix list A

matrix B = A[1...,colnumb(A,"col x")], A[1...,colnumb(A,"col z")]
matrix list B

这会提取"col x""col z"的所有行,并使用列连接运算符,(逗号)将它们组合在一起。

另一个是:

matrix C = A["row a".."row c" , "col x"], A["row a".."row c" , "col z"]

而另一个:

matrix D = A[1... , "col x"], A[1... , "col z"]

另见Stata的矩阵编程语言 Mata help mata)。它更复杂,但更强大。