假设我定义了一个矩阵:
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有什么类似的东西吗?
答案 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()
。
注意:在第一列中确定代码应该选择的内容被设置为热心的练习。