我想基于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
语法。
答案 0 :(得分:1)
在一般情况下,我认为这与你将获得的一样好。如果sum(cond)
为cond
或0
,则1
是安全的,但更常见的选择是:
select = selectindex(cond)
x[select] = J(length(select), 1, a)
我同意这不是最简单的语法。另外一个赋值冒号运算符:=
在这里会很好。
如果x
和cond
是观看次数,则st_store()
是另一种选择:
st_store(., st_viewvars(x), st_viewvars(cond), J(sum(cond), 1, a))
如果您已经知道变量名称/索引而不必调用st_viewvars()
,那就更好了。