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

Matrix Mata矩阵操作:选择矩阵的非缺失行,matrix,extract,stata,Matrix,Extract,Stata,我是马塔的新手,我对st_select()的工作原理有疑问。我想提取一个不缺少行的矩阵,并将其另存为一个新矩阵(nmF)。当我运行我的程序时,我得到一个消息,这个新的矩阵没有找到。我想问题是,在将结果存储到矩阵之前,我需要定义矩阵nmF,但我不知道如何在Mata中执行。任何提示都将不胜感激 cap program drop myexample program def myexample, rclass byable(recall) sortpreserve version 14 syntax v

我是马塔的新手,我对
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

我无法确定代码不起作用的具体原因,但当这种情况发生时,最好简化代码并放慢速度。一个常见的陷阱是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\u select()


包含变量、权重、选项和其他内容的程序上下文在这里似乎并不完全无关。中的“最小值”与“完整”和“可验证”一样重要。

我无法确定代码不起作用的具体原因,但当这种情况发生时,通常最好简化代码并放慢速度。一个常见的陷阱是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\u select()


包含变量、权重、选项和其他内容的程序上下文在这里似乎并不完全无关。中的“最小值”与“完整”和“可验证”一样重要。

感谢您的快速重播。我也尝试过:
st_矩阵(st_local(“nmF”)、select(st_矩阵(
F')、rowmissing(st_矩阵(
F'):==0))
,但我得到了相同的结果。没有创建矩阵。感谢快速重播。我也尝试过:
st_矩阵(st_local(“nmF”)、select(st_矩阵(
F')、rowmissing(st_矩阵(
F'):==0))
,但我得到了相同的结果。没有创建矩阵。谢谢!这都是因为括号放错了地方。我写了
rowmessing(st_matrix(“F”):==0)
而不是
rowmessing(st_matrix(“F”):==0
。我应该看到这一点!谢谢这都是因为括号放错了地方。我写了
rowmessing(st_matrix(“F”):==0)
而不是
rowmessing(st_matrix(“F”):==0
。我应该看到这一点!