2016-05-31 3 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의 "minimal"은 "complete"및 "verifiable"만큼 중요합니다.

+0

감사합니다. 그것은 모두 잘못된 위치에 배치 된 괄호에 관한 것입니다. 나는'rowmissing (st_matrix ("F")) : == 0' 대신'rowmissing (st_matrix ("F") : == 0)'을 썼다. – apereza

+0

나는 그것을보아야했다! –