2016-05-31 76 views
1

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

感谢您的快速回放。我也试过:'st_matrix(st_local(“nmF”),select(st_matrix(“'F'”),rowmissing(st_matrix(“'F'”):== 0)))',但我得到相同的结果。没有矩阵创建。 – apereza

回答

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中的“最小”与“完整”和“可验证”一样重要。

+0

谢谢!这是关于放置在错误位置的括号。我写了'rowmissing(st_matrix(“F”):== 0)'而不是'rowmissing(st_matrix(“F”)):== 0'。 – apereza

+0

我应该看到的! –