数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法こんにちは。条件に基づいて最新の行を検索し、別の列値を取得したり、2 つの行パラメーター (DateTime) 間の計算を実行したりするための数式を作成するのに助けが必要です。
以下のデータ テーブル (これも添付) には、Asset、DateTime、Discrete、Action 列があります。
データは最初に資産に基づいて並べ替えられ、次に DateTime (昇順) に基づいて並べ替えられます。
テーブル変数 days_threshold = 4 もあります。
Action(Desired) は、現在の式が適用されるアクションの望ましい形式です。

変更する必要があります。
を取得する行離散= 1 (通常、これはここでは省略され、代わりに提供されるサンプル値によって計算式ルールによって決定されます)、アクション独自の前の行を探し始める必要があります (日付時刻降順形式)。 その検索における 2 つの条件は次のとおりです。
1-同じものを探しています資産誰のために離散=1 (つまり、XY01 または XY02)
2- 最新の値まで調べますアクション = 1見つかった 。
前回のアクションが 1 であった時刻と現在の行の DateTime の間の日数を計算します。
差 (日数) >= days_threshold = 4 ---> の場合、現在の行のアクション = 1
それ以外の場合、差 (日数) < days_threshold ---> の場合、現在の行のアクション = 0
アクションが「1」だった最新の時刻を見つけることだけに興味があります... その単一の値が見つかると (存在する場合)、検索はその時点で停止できます。 検索の制限は、そのアセットが最初に出現するまで (つまり、最も古いレコード) です。 以前にアクションが「1」に設定されていない場合は、現在の行のアクションを「1」に設定できます。
たとえば、行 2 は、XY01 が初めて Action =1 を取得したものです (Discrete に基づいており、それ自体がいくつかのルールに関連付けられており、この例では値とともに表示されているだけです)。
次の行 3 では、Discrete が再び 1 に設定されますが、今回は、前の行と現在の行の日数の差が 0 (< days_threshold) であるため、Action を 0 にする必要があります。
同様に、行 5 では、前回アクションが 1 であったときからわずか 3 日しか経過していないため、アクションは依然として 0 のままです。
最後に、行 6 でアクションが「1」に設定されます。
このアイデアに従って 2 つのアセットが提供され、目的の値を Action(Desired) に設定します。
私はこれをスクリプトではなく数式にすることを好みます。
JMPチーム、よろしくお願いします。
アルトゥグ バイラム

データのブレンディングとクリーンアップ品質およびプロセスエンジニアリングRe: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法ジャーモ
これは見事に機能しました。また、「;」で区切るとより複雑なロジックが含まれる数式についての理解も深まりました。
また、この場合の 0 が DateTime パラメーターの開始リセットとして機能することも興味深いです。
Jarmo/Jim - 非常に迅速な対応をしていただきありがとうございます...サポートに感謝します。
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法また、私は数式でラグ、日付差を何度も使用します。 しかし、これはコードとして少し複雑になるため、またスクリプトを数式に統合する経験が不足しているため、この面で少し苦労しています。 暦日ではなくレコード数を目的とする場合は、インデックス機能が利用できるため、簡単に実行できます。 「日」という条件がさらに難しくなります。
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法式の部分だけがこれになります。新しい列を作成した後、列情報から式に直接追加できるはずです。
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 で式を作成する
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法こんにちは。スクリプトが式にどのように統合されているかを確認できるよう、バージョンを添付していただけますか。 私はスクリプトを数式に組み込むのは初心者です。
ありがとう。
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法私の数式はすでに月ではなく日を使用しているため、問題なく機能するはずです(テストテーブルで変換しましたが、忘れていました)。 Action2 は、私が提供した式の結果であり、Action(Desired) 列との間に違いはありません。

As Constant、Date Difference、Lag の Scripting Index をチェックすることをお勧めします。 これらは公式の理解を助けるはずです
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法DateTime 形式が修正された次のバージョンについては、以下を参照してください (M/D/Y であるはずです...)
可能であれば、これを行うことができる式を探しています。 THX。
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法この次のバージョンでは DateTime の形式を修正しました。ご協力いただきありがとうございます。
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法「日数」制約はカレンダー時間で測定します。つまり、「アクションが 1 になってから何日経過したか」が問題になります。
DateTime 列の形式を D/M/Y と間違って設定したことに気づきました。
M/D/Y だったはずです...。
間違いをお詫び申し上げます。
したがって、行 3 と行 5 はそれぞれ 6 月 2 日と 5 日になります。
これに対する式を作成することは可能でしょうか?
thx JMPチーム。
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法DateTime 列について質問があります。定義したように、資産 = "XY01" のすべての値は、2022 年のさまざまな月の 6 日に測定されました。
行 3 = 2022 年 2 月 6 日
行 5 = 2022 年 5 月 6 日
これは 89 日離れていますが、必要なアクションが 0 であることを示しています。
@jthi私自身の独自の計算と同様に、応答はアクション 1 を示します。
私たちに何が欠けているのでしょうか?
Re: 数式 - (条件に基づいて) 最新の行を検索し、別の列から値を取得する方法次のようなものが機能する可能性があります。
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;
));