如果在Mata中cond,则替换x

时间:2015-02-03 20:57:00

标签: stata

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

  • x[cond]不是在Mata中进行子集化的正确方法。我应该使用select(x,cond)。不幸的是,后一个对象无法分配给。
  • x[selectindex(cond)] = a失败,因为此类作业要求=两侧的尺寸相同。

我可以修改后一种方法

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

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

1 个答案:

答案 0 :(得分:1)

在一般情况下,我认为这与你将获得的一样好。如果sum(cond)cond0,则1是安全的,但更常见的选择是:

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))

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