基于其他列条件的列的“n”行平均值 -大家好,
我正在寻找基于其他 coulmn (--“Customer_ID”)的“n”行平均值(在所附示例中,n == 3)。 如果每个组(客户)的行号是“n”的整数乘数,即 [Row == Integer Constant xn]。 我的基本公式效果很好。 但如果 Row != Integer Constant xn,则它会从其他组中获取剩余的行。 这给了我错误的结果。
我想要的是 -
最佳情况 - 根据 Cutomer_ID 计算数据子集排序的“n”行平均值,并为最后剩余的行输入先前平均值的平均值。
否则 - 保留空值不变。
我尝试输入 :Customer_ID != Lag(:Customer_ID, -2) 但它对我不起作用。 我可以根据 Customer_ID 拆分表,然后进行计算,但是 - 有超过 5000 个 ID 和大约 20 列需要进行平均。 这似乎不是最好的主意!
有什么帮助吗?
谢谢。

数据混合和清理回复:根据其他列的条件计算一列的“n”行平均值 -不知道这是否适用于所有情况,但它确实适用于提供的示例数据:
If(Col Cumulative Sum(1, :Customer_ID) > Col Number(:Value, :Customer_ID) - 1,
Lag(Col Moving Average(:Value, 1, 0, 2, 0, :Customer_ID), 1),
If(Modulo(Col Cumulative Sum(1, :Customer_ID), 3) == 1,
Col Moving Average(:Value, 1, 0, 2, 0, :Customer_ID),
.
)
)
从脚本索引/脚本指南检查每个函数/公式的作用尽管检查公式编辑器中选定的子表达式结果以了解它在做什么,因为它非常混乱:

回复:根据其他列的条件计算一列的“n”行平均值 -这是我想出的公式

If( Row() == 1 | :Customer_ID != Lag( :Customer_ID ),
count = 0
);
If( count == 3, count = 0 );
count = count + 1;
If(
count == 1,
currentAvg = Col Moving Average( :Value, 1, before = 0, after = 2, :Customer_ID );
display = currentAvg;,
:Customer_ID == Lag( :Customer_ID, -2 ), display = .,
display = currentAvg
);
display;
您需要花时间阅读“帮助”下拉菜单下 JMP 文档库中的脚本指南!