2016-05-31 74 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

我應該看到的! –