对不起,如果这是一个基本问题,但我无法找到任何解决方案,无论是在这里还是在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 x
和col z
创建由第一列和最后一列组成的矩阵。
"最接近"我能够表现的是:
mat B = A[.,"col x".."col z"]
这显然是错误的。任何其他尝试都会导致仅由第一列组成的矩阵B
。
我在这里缺少什么?
答案 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
)。它更复杂,但更强大。