条件式条件付きの列式を他の列に追加しようとしています。 「結果」列が「件名」と「製品」ごとに積み上げられ、「時間」にわたって複数の値が含まれるデータがあります。 次のように「結果」の各値のベースラインを計算しようとしています。
新しい列 = "結果" – [特定の件名と製品の組み合わせの時間=(1) である "結果" の値]
ありがとう
自動化とスクリプト作成Re: 条件式データの例を挙げていただけますか?それは適切な解決策を見つけるのに役立ちます。
Re: 条件式データが件名、製品、時間で並べ替えられている場合、この例は機能します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
dt:age << set name( "Subject" );
dt:sex << set name( "Product" );
dt:weight << set name( "Results" );
dt << New Column( "baseline",
formula(
If( Row() == 1,
valueTime1 = :Results,
If( :Subject != Lag( :subject ) | :Product != Lag( :product ),
valueTime1 = :Results
)
);
baseline = :Results - valueTime1;
)
);Re: 条件式サンプルデータを同梱しました。 新しい列を追加する必要があります。数式では、各件名/製品の組み合わせの Time(-5) 結果値を取得し、件名/製品の組み合わせの各結果からその値を減算する必要があります。
Re: 条件式場合によっては、列数式の複雑な JSL を記述するよりも、いくつかの手順でこのような問題に対処する方が簡単な場合があります。 ここでは、「サブセット」を使用して Time=-5 行を抽出し、「更新」を使用してそれらを元のデータ テーブルに結合し、列式で単純な減算を実行するアプローチを示します。 JMP 17 を実行している場合、ワークフローはこの種のものを構築および共有するための優れた方法です。
Re: 条件式私が思いついた JSL はそれほど複雑ではありません。数式ではなくテーブルスクリプトを書きました。データを追加するたびにこれを実行できます。
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = :Results[val] );
For Each Row( dt, :New Column = :Results - OffsetArray[:Subject || :Product] );編集
テーブルをさらに見てみると、いくつかの :Results セルに値が欠落していることに気付きました。これらを 0 に再コーディングするか、スクリプトを少し変更する必要があります。
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = If( !Is Missing( :Results[val] ), :Results[val], 0 ) );
For Each Row( dt, :Results with Offset = :Results - OffsetArray[:Subject || :Product] );
Re: 条件式これを検証するデータがないため、単なる推測にすぎません
:Result - Col Min(If(:Time == 1, :Result, .), :Group);
編集:
サンプルデータを受け取った後に式を更新しました
:Results - Col Min(If(:Time == -5, :Results, .), :Subject, :Product)