如果在 Mata 中有条件,则替换 x

Replace x if cond in Mata

我想用基于 0/1 向量 cond 的标量 a 覆盖向量 x 的一些元素。在伪代码中:x[cond]=a.

我可以将后一种方法修改为

x[selectindex(cond)] = J(sum(cond),1,a)

这是马塔语中的成语吗?我期待更直接的东西,因为 Stata 有很好的 replace x = a if cond 语法。

在一般情况下,我认为这与您将获得的效果差不多。如果 cond01sum(cond) 是安全的,但更通用的替代方法是:

select = selectindex(cond)
x[select] = J(length(select), 1, a)

我同意这不是最简单的语法。额外的赋值冒号运算符 := 在这里会很好。

如果xcond是浏览量,st_store()是另一种选择:

st_store(., st_viewvars(x), st_viewvars(cond), J(sum(cond), 1, a))

如果您已经知道变量 names/indices 而不必调用 st_viewvars(),那就更好了。