分配生產階段的列公式存在問題大家好,
我正在嘗試編寫一個列公式,該公式將查看兩行之間的日期差異,如果 >= 大於某個值(在本例中為 4 天),則該列應減少相位值。如果日期差異<4,則應保留前一階段值。我在公式中定義了兩個局部變數:phase 和 MinDaysbreak,它是階段 (4) 之間的最短天數。列 :"Date/Time:"n 是 For() 迴圈迭代的日期列。

我的公式如下:

該公式的 JSL 程式碼如下:
For( i = N Rows(), i >= 1, i--,
If( i == N Rows(),
phase,
If( Abs( Date Difference( :"Date/Time:"n[i + 1], :"Date/Time:"n, "Day" ) ) >= MinDaysbreak,
phase--,
phase
)
)
)
我沒有收到任何公式錯誤,公式未被抑制,但該列仍然為空。即使我刪除第一個 If() 中的第一個 else 語句,最後一行仍然什麼也得不到,而該列的最後一個條目應該是 9,因為這是局部變數階段。我知道有9個階段。
我不確定我做錯了什麼,但如果我忽略了一個簡單的錯誤,我不會感到驚訝。
謝謝你的幫忙!,
DS
進階統計建模自動化和腳本編寫數據探索和視覺化分享和交流成果回覆:分配生產階段的列公式問題此列為空,因為 For() 函數不傳回值。嘗試將此程式碼貼到公式編輯器中:
Local({i = N Rows(), phase = 9, MinDaysbreak = 4},
For(i, i >= Row(), i--,
If(i == N Rows(),
phase,
If(Abs(Date Difference(:"Date/Time:"n[i + 1], :"Date/Time:"n[i], "Day")) >= MinDaysbreak,
phase--,
phase
)
)
);
phase;
)我認為它會按預期工作。請注意這些變化:
– 設定目前行值的附加階段(在 For 迴圈內計算之後)。如果沒有這個,你會得到一個空列。
– 為了正常工作,您不應該迭代所有行,而只能使用Row()迭代到目前行。否則,每一行都會得到相同的值。
– 您需要兩個日期的索引,以確保始終與下一行進行比較。如果沒有,很難預測結果(取決於數據)。
我還將初始i定義為本地參數,但我認為這不是必需的。
但是,在列公式中使用 for 迴圈的情況很少見。如果您有一個很大的資料集,那麼循環遍歷表來設定每一行的值可能會非常低效。還有其他方法可以解決這個問題,使用列公式或 JSL。
/多發性硬化症