2015-07-03 215 views
1

比方說,我定義了一個矩陣:訪問元素

matrix a = (2,3 \ 4,7 \ 6,13) 

我可以訪問「13」是這樣的:

display a[3,2] 

是否也可以進入「13」,而指到「6」來指定行?換句話說,我們會以某種方式表示該行是行(可能有多個),在第一列包含6,然後我們需要該行的第二列。

在R,我們可以做這樣的:

a1 <- data.frame(c(2,4,6), c(3,7,13)) 
a1[a1[,1]==6, 2] 

是否有類似的事情在Stata?

+0

請注意,您的文本顯示一行包含6(隱含在任何列中),但您的R代碼(據我瞭解)僅在第一列中查找6 **。 –

+0

...也沒有關於訪問_name_ ... –

+0

良好的捕獲 - 我是馬虎。我更新了文字以反映第一欄。我更新的標題是按價值而不是按名稱。謝謝! – bill999

回答

1

你可以用Stata的矩陣語言和一些編程來做到這一點,但我會轉向Mata,其定義的功能允許直接的解決方案在精神上類似於R.考慮這個對話。

. mata 
------------------------------------------------- mata (type end to exit) -------------- 
: a = (2,3 \ 4,7 \ 6,13) 

: a :== 1 
     1 2 
    +---------+ 
    1 | 0 0 | 
    2 | 0 0 | 
    3 | 0 0 | 
    +---------+ 

: a :== 6 
     1 2 
    +---------+ 
    1 | 0 0 | 
    2 | 0 0 | 
    3 | 1 0 | 
    +---------+ 

: rowsum(a :== 6) 
     1 
    +-----+ 
    1 | 0 | 
    2 | 0 | 
    3 | 1 | 
    +-----+ 

: select(a, rowsum(a :== 6)) 
     1 2 
    +-----------+ 
    1 | 6 13 | 
    +-----------+ 

: a2 = select(a, rowsum(a :== 6)) 

: a2[, 2] 
    13 

: b = (6,6 \ 6,6 \ 6,6) 

: select(b, rowsum(b :== 6)) 
     1 2 
    +---------+ 
    1 | 6 6 | 
    2 | 6 6 | 
    3 | 6 6 | 
    +---------+ 

: b2 = select(b, rowsum(b :== 6)) 

: b2[, 2] 
     1 
    +-----+ 
    1 | 6 | 
    2 | 6 | 
    3 | 6 | 
    +-----+ 

「行包含6」由跨行的「元素等於6」的總數定義。注意,如果(a)一行中有多於一個6和/或(b)多於一行爲6,則該代碼有效。在最後一種情況下,所選內容包含多個元素。

符號似乎不言自明,除了可能:作爲前綴信號「元素」操作。要將Stata矩陣複製到Mata中,請使用st_matrix()

注意:確定代碼應該在第一列中選​​擇的內容僅作爲熱心的練習。