分配生产阶段的列公式存在问题大家好,
我正在尝试编写一个列公式,该公式将查看两行之间的日期差异,如果 >= 大于某个值(在本例中为 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。
/多发性硬化症