基於其他列條件的列的“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 文件庫中的腳本指南!