如何根据不同的标准对组进行细分

how to segment groups based on different criteria

我正在尝试将基于 A 到 F 列值的测试和控制组分配给下面的 table。

最终,我想要 table 如下所示。如果不同的拉链对所有列具有相同的值,则将一半的拉链分配给测试,一半分配给控制。如果zip总数不能均分,那就把多余的zip给控制。

您可以使用 row_number()mod():

select 
    t.*,
    case when mod(
        row_number() over(partition by A, B, C, D, E, F order by zip), 
        2
    ) = 0 then 'T' else 'C' end tc_group
from mytable t

row_number() 将递增的数字分配给共享相同 (A, B, C, D, E, F) 值的记录,按递增的 zip 排序。我们会将偶数行号分配给测试组 T,将奇数行号分配给组 C.

我认为分层样本会满足您的要求:

select t.*,
       (case when mod(row_number() over (order by a, b, c, d, e, f), 2) = 1
             then 'C' else 'T'
        end) as test_group
from t;

这不是确切地你如何表述问题,但它应该具有相同的效果,即在两组中将列中具有相同值的行平均拆分。当有奇数时,多余的有时会去测试,有时会去控制。

从问题中不清楚您是否需要平衡的控制组和测试组 -- 这正是我所期望的。如果你真的希望所有奇数组都去控制(如你建议的那样),那么所有的连体衣都将在控制中,这对我来说似乎有偏见。