按值访问矩阵的元素

时间:2015-07-03 14:23:52

标签: matrix stata

假设我定义了一个矩阵:

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

我可以像这样访问“13”:

display a[3,2]

在引用“6”指定行时是否也可以访问“13”?换句话说,我们会以某种方式表示该行是第一列中包含6的行(可能有多个),然后我们想要该行的第二列。

在R中,我们可以这样做:

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

Stata有什么类似的东西吗?

1 个答案:

答案 0 :(得分: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  |
    +-----+

&#34;行包含6&#34;由&#34;元素的总和定义等于6&#34;跨行。请注意,如果(a)一行中有多个6和/或(b)存在多个带​​有6的行,则代码可以工作。在最后一种情况下,所选内容包含多个元素。

符号应该看起来不言自明,除了:作为前缀信号&#34; elementwise&#34;操作。要将Stata矩阵复制到Mata,请使用st_matrix()

注意:在第一列中确定代码应该选择的内容被设置为热心的练习。