公式 - 如何查找最近的行(基于条件)并从不同的列检索值您好 - 我需要帮助来输入公式以根据条件查找最新行并检索不同的列值/在两个行参数(日期时间)之间执行计算。
下面的数据表(另附)有:资产、日期时间、离散和操作列。
数据首先根据资产排序,然后根据日期时间排序(升序)
还有一个表变量 days_threshold = 4。
Action(Desired) 是所需的 Action 形式,其中当前公式

需要修改。
任何获得 a 的行离散的= 1(通常由此处跳过的公式规则和提供的样本值确定),行动需要开始查找它自己的先前行(在约会时间降序形式)。 该搜索中的两个条件是:
1-寻找相同的资产为此离散的=1(即 XY01 或 XY02)
2-查找直到最近的值行动 = 1被发现。
计算上次 Action 为 1 与当前行的 DateTime 之间的天数。
如果差异(以天为单位)>= days_threshold = 4 ---> 则当前行的操作 = 1
否则,如果差异(以天为单位)< days_threshold ---> 则当前行的操作 = 0
只对查找 Action 为“1”的最近时间感兴趣...... 一旦找到该单个值(如果存在),搜索就可以在该点停止。 搜索的限制是直到该资产第一次出现为止(即最旧的记录)。 如果 Action 之前从未设置为“1”,则当前行的 Action 可以设置为“1”
例如,第 2 行是 XY01 第一次获取 Action =1(基于离散,其本身与某些规则相关,仅在本例中显示 w/值)。
接下来在第 3 行,Discrete 再次设置为 1,但这次 Action 需要为 0,因为先前行和当前行之间的天数差异为 0 (< days_threshold)。
同样,对于第 5 行,Action 仍保持为 0,因为距离上次 Action 为 1 只过去了 3 天。
最后,Action 在第 6 行设置为“1”。
遵循此想法提供了两个资产 - 将所需值设置为 Action(Desired)。
我更喜欢这是一个公式而不是脚本。
预先感谢 JMP 团队。
阿尔图拜拉姆

数据混合和清理质量和工艺工程回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值雅尔莫
这效果非常好。它还打开了我对公式的理解,以“;”分隔时包含更复杂的逻辑。
另外,有趣的是,本例中的 0 充当 DateTime 参数的起始重置。
Jarmo/Jim - 感谢您对此的快速帮助...感谢支持。
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值另外,我在公式中多次使用滞后、日期差异。 但由于这确实变得有点复杂,并且由于我缺乏将脚本集成到公式中的经验,因此我在这方面遇到了一些困难。 如果目的是记录数量而不是日历天数,由于可用的索引功能,我可以轻松做到这一点。 “日”的要求使得事情变得更加困难。
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值只是公式部分就是这样,您应该能够在创建新列后将其直接从列信息添加到公式中
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
我还附上了表格。 如果您对公式非常不熟悉,您可以阅读本文的某些部分使用 JMP > 在 JMP 中创建公式
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值您好,请附上您的版本,以便我可以看到脚本如何集成到公式中。 我是将脚本放入公式中的新手。
谢谢。
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值我的公式应该仍然可以正常工作,因为它已经使用了几天而不是几个月(我在测试表中进行了转换,但忘记了)。 Action2 是我提供的公式的结果,它与 Action(Desired) 列没有区别:

我建议查看“常量”、“日期差异”和“滞后”的脚本索引。 这些应该有助于理解公式
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值请参阅下面的我的下一个版本,其中包含更正的日期时间格式(应该是 M/D/Y ...)
如果可能的话,我正在寻找一个可以做到这一点的公式。谢谢。
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值我在下一个版本中更正了日期时间的格式。感谢您的帮助。
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值日历时间中的“天”约束测量 - “自 Action 为 1 以来经过了多少天”是问题。
我意识到我将日期时间列上的格式错误为 D/M/Y
应该是 M/D/Y ....
我对这个错误表示歉意。
所以第 3 行和第 5 行分别是 6 月 2 日和 5 日。
是否可以为此创建一个公式?
感谢 JMP 团队。
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值我对您的日期时间列有疑问。正如您所定义的,资产 =“XY01”的所有值都是在 2022 年各个月份的第 6 天测量的。
第 3 行 = 2022 年 2 月 6 日
第 5 行 = 2022 年 5 月 6 日
相隔 89 天,但您指定所需的操作为 0。
@jthi响应显示 Action 为 1,我自己的独立计算也是如此。
我们缺少什么?
回复:公式 - 如何查找最近的行(基于条件)并从不同的列检索值像这样的事情可能会起作用:
dt << New Column("Action", Numeric, Nominal, Formula(
As Constant(
latest_ac = 0;
ret_val = 0;
);
If(:Asset == Lag(:Asset),
If(:Discrete & Date Difference(latest_ac, :DateTime, "day") >= :days_threshold,
latest_ac = :DateTime;
ret_val = 1;
,
ret_val = 0;
);
,
latest_ac = 0;
ret_val = 0;
);
ret_val;
));