【问题标题】:Mata matrix manipulation: selecting non-missing rows of a matrixMata 矩阵操作:选择矩阵的非缺失行
【发布时间】:2023-03-07 13:16:01
【问题描述】:

我是 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

【问题讨论】:

  • 感谢您的快速重播。我也尝试过:st_matrix(st_local("nmF"), select(st_matrix("F'"), rowmissing(st_matrix("F'"):==0))), 但我得到了相同的结果。没有创建矩阵。

标签: matrix extract stata


【解决方案1】:

我无法确定您的代码无法运行的具体原因,但是当这种情况发生时,简化代码并放慢速度通常是个好主意。一个普遍的缺陷是,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 中的“最小”与“完整”和“可验证”一样重要。

【讨论】:

  • 谢谢!这完全是关于放置在错误位置的括号。我写了rowmissing(st_matrix("F"):==0) 而不是rowmissing(st_matrix("F")):==0
  • 我应该看到的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多