Mata矩阵操作:选择矩阵的非缺失行

时间:2016-05-31 18:19:43

标签: matrix extract stata

我是Mata的新人,我怀疑st_select()是如何运作的。我想提取一个包含非缺失行的矩阵,并将其保存为新矩阵(nmF)。当我运行我的程序时,我得到的消息是找不到这个新矩阵。我想问题是我需要在将结果存储到它之前定义矩阵nmF,但我不知道如何在Mata中执行它。任何提示都会非常感激!

cap program drop myexample
program def myexample, rclass byable(recall) sortpreserve
version 14
syntax varlist [aweight iweight fweight] [if] [in] 
args var1 
tempname F  rF nmF

set more off

local var1:  word 1 of `varlist'

mat `F' = (.,.,. \ 0,2,0 \ 0,0,3)
mat list `F'

mata st_matrix(st_local("rF"), colsum(st_matrix("`F'"))) /*1 x cols*/
mat list `rF'

mata st_select(st_matrix(st_local("nmF")),st_matrix("`F'"), rowmissing(st_matrix("`F'"):==0))
*mata : st_matrix(st_local("nmF"), select(st_matrix("`F'"), rowmissing(st_matrix("`F'"):==0)))  /* I have also tried this*/
mat list `nmF'

end

1 个答案:

答案 0 :(得分:0)

我无法确定您的代码无法正常工作的具体原因,但是当发生这种情况时,通常最好简化代码并减慢速度。一个普遍的缺陷是Mata本身无法看到本地宏。

这有效:

tempname F rF nmF 
mat `F' = (.,.,. \ 0,2,0 \ 0,0,3)
mat list `F'

mata st_matrix(st_local("rF"), colsum(st_matrix("`F'"))) 
mat list `rF'

mata 
work = st_matrix("`F'") 
st_matrix(st_local("nmF"), select(work, rowmissing(work) :== 0)) 
end 

mat list `nmF'

为什么要在这里使用st_select()

具有变量,权重,选项的程序的上下文以及这里看起来并不相关的内容。 "最小"在https://stackoverflow.com/help/mcve中与"完整"同样重要。和"可验证"。