合格/不合格の判定方法はどのようになりますか?数式が null 値を返すという問題が発生しています。
生データテーブルは生データであり、仕様テーブルは、仕様テーブルに基づいて生データが合格か不合格かを判定するために使用されます。JSLを記述しましたので、問題の原因を特定できるようご支援いただければ幸いです。よろしくお願いいたします。
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
LSL = dtbz[0, 3];
USL = dtbz[0, 4];
dtbz << New Column( "combine", formula( :Project || :Item ) );
// Create separate judgment columns for the columns to be judged
items = Design( dtbz:Item << get values(), <
<LEVELS>
0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "A" || it )[1]], :Project == "B" & N Items( Loc( dtbz:combine << get as matrix(), "B" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "B" || it )[1]], :Project == "C" & N Items( Loc( dtbz:combine << get as matrix(), "C" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "C" || it )[1]], :Project == "D" & N Items( Loc( dtbz:combine << get as matrix(), "D" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "D" || it )[1]], ) ) ) );
</LEVELS>
自動化とスクリプトRe: 合格/不合格の計算式はどのように機能しますか?これは、スクリプトを簡素化し、それでも利回りを提供すると思われるスクリプトの再加工です

Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
LSL = dtbz[0, 4];
USL = dtbz[0, 5];
//dtbz << New Column( "combine", formula( :Project || :Item ) );
dtbz << New Column( "combine", character, formula( :Project || :Item ) );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]],
:Project == "B" & N Items( Loc( dtbz:combine << get as matrix(), "B" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]],
:Project == "C" & N Items( Loc( dtbz:combine << get as matrix(), "C" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]],
:Project == "D" & N Items( Loc( dtbz:combine << get as matrix(), "D" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]],
)
)
);*/
Eval(
Substitute(
Expr(
dt1 << New Column( it || "—yield",
formula(
curProject = :Project;
Try( dtbzRow = (dtbz << get rows where( dtbz:Project == curProject & dtbz:item == __it__ ))[1], 0 );
If( dtbzRow > 0,
If( dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz:USL[dtbzRow],
1,
0
)
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>
Re: 合格/不合格の計算式はどのように機能しますか?素早い回答をありがとうございます。うまくいきました。
Re: 合格/不合格の計算式はどのように機能しますか?やあジム、もう 1 つの小さな問題は、対応する USL と LSL が仕様テーブルに見つからない場合、null 値が返されるはずですが、このコードが実行されても 0 が返されることです。 何が起こっているのか分かりません。
Re: 合格/不合格の計算式はどのように機能しますか?私が提供した最初の変更では、すべてのスペック制限が利用可能であることを前提としていました。制限が欠落する可能性を考慮して、そのような場合に対処できるように式を変更する必要があります。以下の JSL は、考えられるいくつかのケースに合わせて調整されていますが、次のような他のケースを追加する必要がある場合があります。
USL は LSL より小さいです
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0 & Is Missing( dtbz:LSL[dtbzRow] ) == 0 & Is Missing( dtbz:USL[dtbzRow] ) == 0,
If( dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz:USL[dtbzRow],
1,
0
),
.
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>Re: 合格/不合格の計算式はどのように機能しますか?ありがとうございます。でも質問があります。なぜ前のコードでこの問題が発生したのですか? 前のコードのロジックは次のとおりです。SPEC テーブルで見つかった場合、判定は見つからず、コードがないため、空の値になるはずです。ああ、なぜまだ判定しているのでしょうか?
Re: 合格/不合格の計算式はどのように機能しますか?計算値は行間で保持されるため、行 2 の条件によって計算値が変更されない場合、行 1 で計算された値は変更されません。
Re: 合格/不合格の計算式はどのように機能しますか?ありがとう! 実際に試してみましたが、前のコード実行では、SPEC テーブルに見つからない場合は、前の行の dtbzRow が実行されます。 明らかに見つかりませんが、それでも前の行の値が押されます。 これは日常的な数式では見当たりませんが、別のテーブルのルックアップを使用する場合にのみ発生するのでしょうか?
Re: 合格/不合格の計算式はどのように機能しますか?JMP のメモリ変数は、変更されるまで永続的に残ります。これは、行 1 に変数「a」を設定し、行 10 でそれを変更する新しい列と数式を作成するスクリプトです。「a」の値は行 10 まで変化せず、そのままであることがわかります。それまでの初期設定値。
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// New column: Column 6
Data Table( "Big Class" ) << New Column( "test",
Numeric,
"Continuous",
Format( "Best", 12 )
);
dt:test << set formula(
If( Row() == 1, a = 1 );
If( Row() == 10, a = a + 1 );
:test = a;
);
Re: 合格/不合格の計算式はどのように機能しますか?なるほど、try文で見つからないと値が代入されずに元の値になるからなんですが、冒頭の1行目には見つからないので、どうでしょうか。それは割り当てられましたか?
Re: 合格/不合格の計算式はどのように機能しますか?読みやすくするために、スクリプトに注釈を付けました。また、Try() 関数に小さな変更を加え、結果を dtbzRow に提供するように変更しました。
これが理解に役立つかどうかを確認してください
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0 & Is Missing( dtbz:LSL[dtbzRow] ) == 0 &
Is Missing( dtbz:USL[dtbzRow] ) == 0,
// If the column's value is between the LSL and USL
// the value is set to 1, if outside one of the
// limits it is set to 0
If(
dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz
:USL[dtbzRow],
1,
0
),
.
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>Re: 合格/不合格の計算式はどのように機能しますか?わかりました。お待ちいただきありがとうございます。