事件发生前的行数在不使用 JSL 的情况下,是否有一种方法可以计算一列,告诉您在事件发生之前还剩下多少行?
以下公式有效,但需要用户在“应用”中单击 n 次
我们可以把这个公式放在一个 for 循环中“应用它”n 次吗?

高级统计建模自动化和脚本编写质量和工艺工程回复:事件发生前的行数我没有想到不需要 JSL 的简单方法,它允许您使用原始公式而无需按“应用”或多次使用重新运行公式。 由于在这种情况下没有变量,甚至构建公式也有点困难(即使 for 循环也有索引变量)。
例如,如果最后一行之后没有事件,则无法轻松处理最后一行(而且公式也不容易解释):
If(:Event == 1,
0,
For(i = 1, i <= N Rows() - Row(), i++,
If(Lag(:Event, -1*i) == 1,
Break();
);
);
i;
);
回复:事件发生前的行数我正在寻找一个非常容易向新 JMP 用户解释的公式。
- 在循环中添加我的原始公式,这样您就不需要单击“应用”,这将是最容易解释的。
- 颠倒顺序很直观,但需要额外的步骤(见上文)
- 创建临时变量的解决方案看起来就像将脚本制作成公式(程序员思维方式,对于新用户来说并不理想)。
所以也许就像问一样简单,我如何循环一个公式,以便它被应用 N 次?
回复:事件发生前的行数此时我不得不问:我们在这里寻找什么? 哪个单一公式也是不言自明的?
我提供的公式是一个单一的公式(如果在某个特定点之后没有事件,则需要进行一些小的更改来处理情况),但几乎不言自明,但可以通过使用具有良好名称的支持变量来使其更接近公式。
回复:事件发生前的行数也许我们可以利用这样一个事实:如果行顺序相反,解决方案会在 JMP 中自行填充?

例如,这将颠倒事件的顺序。
事件反转:
:Event[(N Rows() - Row()) + 1]
现在,随着从上到下的计算,值会自动填充
反转事件后的 n 行:
If( :Event inverted == 1, 0,
Lag( :n rows after inverted event, 1 ) + 1
)
最后,我们扭转了该专栏。
:n rows after reversed event[(N Rows() - Row()) + 1]
关于如何用一个易于解释的公式来做到这一点有什么想法吗?
回复:事件发生前的行数您可以使用更复杂的公式。 像这样的东西可以工作(可能无法正确处理所有特殊情况):
If(Row() == 1,
m_events = Loc(:Event << get as matrix, 1);
);
smallerRows = Loc(Row() <= m_events);
If(N Items(smallerRows) == 0,
0,
rowNextEvent = m_events[smallerRows[1]];
If(rowNextEvent,
rowNextEvent - Row();
);
);