公式 - 如何查找最近的行(基於條件)並從不同的列檢索值您好 - 我需要幫助來輸入公式以根據條件查找最新行並檢索不同的列值/在兩個行參數(日期時間)之間執行計算。
下面的數據表(另附)有:資產、日期時間、離散和操作列。
數據首先根據資產排序,然後根據日期時間排序(升序)
還有一個表變量 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;
));