一般问题:我不了解如何根据其他群组的条件创建值。我想做点什么:
gen x = cond(cond1==1 & cond2==1, value[**of some other row in a different group**], other_value)
具体问题:鉴于大量数据集包含基于id
的组永不更改,以及辅助ID(co_id
)。每个组都有多行,在time
中重复。每行都有一个标志(is_a
),表示在某个时间与另一个组(即id
)的关系。该关系由co_id
的更改表示,因此它等于另一组。
我正在尝试做两件事:
答案 0 :(得分:0)
我认为其中一个问题是我在精神上坚持使用id
作为我的分组操作的基础。在这里使用co_id
帮助了一些按排序:
sort co_id time id
by co_id: gen id_co = id[1] if is_a==1
创建一个辅助变量来检查co_id
以来time
是否发生了变化:
sort id time
by id: gen changed_co_id = cond(co_id[_n]!= co_id[_n-1], 1, 0)
by id: replace changed_co_id = 0 if _n==1
by id time: replace changed_co_id = 1 if changed_co_id[1]==1
现在我可以为另一个组创建标志,以指示何时建立连接:
#delimit ;
sort co_id time is_a changed_co_id;
by co_id time: gen is_conn = cond(is_a==0 &
changed_co_id==0 &
is_a[_N]==1 &
changed_co_id[_N]==1, 1, 0);
#delimit cr
因此,为了创建标记,我们需要按co_id
排序,这样我们就可以通过id
得到所连接组的time
个changed_co_id
,这样它们就可以共存了连接(以及之后)和time
因此我们可以找到连接所在的确切php artisan make:request myQuantityBoxRequest
- 此外,这种安排可确保新连接的观察结果出现在每个组的末尾。然后我们标记发起连接的组的观察结果:如果它们没有自己连接并且最后一个观察结果是,那么就是新的。