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
。我应该看到这一点!