一時変数の式を作成するこんにちは、みんな、
私はまだ JMP スクリプトの初心者です。 値を変数として、しかし独自の名前を付ける数式を作成するのに助けが必要です。 私が言いたいことは以下のとおりです。 そこで、以下の列4を分布グラフの変数にできる数式を作成したいと思います。
プラスチック = 0.424542 のようなものです
現時点での問題は、式名が t4 = :TYPE;:MIN; と同じになることです。 したがって、分布グラフにプラスチックの最小値をプロットしたい場合は、岩石の式も t4 であるため、岩石の最小値が使用されます。
それで、変数の値が次になるように式を作成するにはどうすればよいですか
プラスチック = :TYPE;:MIN;
紙= :タイプ;:分;
などの場合は、すでに独立した変数にすることができます。誰かがこれについて助けてくれれば本当に感謝します。もう数時間インターネットを見ています。

Re: 一時変数の計算式を作成する私のミスで、「)」を省略してしまいました。このコードを試してください
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ");";
// Run the generated code
Eval( Parse( theExpr ) );Re: 一時変数の計算式を作成するこんにちは、ジムさん
ここに、あなたが与えたコードを少し変更して実行するためのテーブルを添付しました。 ここで書いたスクリプトを実行しても分布グラフは自動生成されません。
ログを確認し、何が問題なのかをデバッグしようとしましたが、エラーがあると訴えている理由が見つからないようです。私には大丈夫そうに見えます。
エラーは以下のようなものです。
入力が予期せず終了しました。 おそらく「,」または「)」が欠落している可能性があります。
関数「Distribution」の引数を解析しようとしています。
行 2 列 560: ...通常の分位点プロット(1));►...
Re: 一時変数の計算式を作成する私が提供したコードはディストリビューションも生成するはずです。
問題が何であるかを確認できるように、実行しているデータ テーブルのコピーを添付していただけますか?...ログ ファイルを調べると、問題が何であるかもわかるはずです。
Re: 一時変数の計算式を作成するこんにちは、ジムさん
はい、列内の多くの TYPE 値に対して機能しますが、分布グラフをプロットする場合は、手動でプロットする必要があります。
すべてのTYPE値のすべての制限を計算した後、自動的に分布グラフをプロットするようにすることはできますか?スクリプトをエクスポートするために手動でグラフをプロットしようとしましたが、ここでのみ示したサンプルテーブルのTYPE値にすべてがハードコードされているようです。
TYPE 値も時々異なります。 したがって、JSL内のハードコードされた行を避ける必要があります。
@txnelson
Re: 一時変数の計算式を作成する私が書いたコードは、データ テーブル内で見つかったすべての TYPE 値で機能するはずです。そうでない場合はエラーなので、コードを修正する必要があります。
Re: 一時変数の計算式を作成する私が提供したコードは、データ テーブル内で見つかったすべての TYPE 値に対して機能するはずです。
Re: 一時変数の計算式を作成するこんにちは、ジムさん
私が言いたいのは、すべての制限を計算した後、計算された制限とともにすべての TYPE 値の分布グラフを直接プロットするということです。 それで、スクリプトを使用してこれを実行しようと考えていますが、すべてのタイプ分布グラフをプロットした後にスクリプトをエクスポートしようとすると、すべてのタイプグラフが現在のテーブルにのみハードコーディングされているように見えます。
つまり、TYPE 列に新しい項目がある場合、分布グラフはプロットされません。 これら 4 つの項目のみがタイプ列にのみプロットされます。
これがあなたの質問の答えになることを願っています。これについてさらに説明が必要な場合はお知らせください。ありがとう!Re: 一時変数の計算式を作成する@mhalwi
「」の意味を説明していただけますか分布グラフの自動プロット「?新しいデータテーブルを開いたときに JMP でプロットを実行しますか?それとも、システム上で新しいデータが利用可能になったことを JMP に認識させたいですか?
Re: 一時変数の計算式を作成するこんにちは、ジムさん
どうもありがとう!あなたの方法もうまく機能します。 手動でグラフのプロットを選択するのではなく、JSL を使用して分布グラフのプロットを自動的に行う機会はありますか?Re: 一時変数の計算式を作成するやあ@ジュリアン、
どちらのソリューションもうまく機能します。おかげさまで!
alt メソッドに関して 1 つの質問があります。テーブルを分割した後、手動でグラフをプロットする必要があります。 TYPE列の値は常に変化するため、すべての列の分布グラフをプロットする方法はありますか?
ご協力ありがとうございます!!
Re: 一時変数の計算式を作成するここでは、生成しようとしている出力に対する別のアプローチを示します。これは、仕様制限を列プロパティとして持つことができる JMP の機能を利用し、配布プラットフォームがそれらを認識して、プラットホーム
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ";";
// Run the generated code
Eval( Parse( theExpr ) );Re: 一時変数の計算式を作成するやあ@mhalwi 、
あなたが今何をしようとしているのかがわかります。 サマリー テーブルを構築した後に次の jsl を挿入すると、タイプのレベルごとに名前が付けられた LSL と USL の変数が作成されます (ここに完全なスクリプトが添付されています、LSL USL - Original Method.jsl)。
For Each Row(Eval(Parse(Concat("LSL_",:Type," = ",Char(lower_limit)))));
For Each Row(Eval(Parse(Concat("USL_",:Type," = ",Char(upper_limit)))));
ここで、各タイプの Distribution を呼び出して参照線を作成するときに、LSL と USL にタイプ名を追加します。 たとえば、「紙」のディスパッチでは次のようになります。
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL_Paper, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL_Paper, Solid, "Medium Dark Red", "", 2 )}
)
しかし、これは私に考えさせました。これを達成するために、少し異なる方法を受け入れていただけますか? これを行うもう 1 つの方法は、元のテーブルを分割した場合、jsl を介して LSL と USL を列プロパティとして設定できることです。 その後、Distribution() を呼び出すと、制限が自動的にプロットされます。 そのための JSL も添付されています (LSL USL - Alt method.jsl)。
それは役に立ちますか?
@ジュリアン
Re: 一時変数の計算式を作成するこんにちは、みんな、
やあ@uday_guntupalliと@ジュリアン、
ここにサンプルテーブルと jmp スクリプトを添付しました。そうすることで、皆さんが試してみて、ここで何を達成しようとしているのかを理解できるようになります。 コンピュータ内のデータテーブルへのパスを変更するだけです。
スクリプトにあるように、データ テーブルの概要に式 (USL および LSL) があります。
したがって、今私がしなければならないことは、プラスチックなどの USL の値を取得できる別の数式を作成し、Plastic_USL = 0.4 のようなものになるように割り当てることです。 次に、変数 (Plastic_USL) を使用して、sendToReport 関数を使用してプラスチック分布グラフにプロットします。したがって、TYPE 列の他の項目リストにも同じことが当てはまります。
USL変数を直接使用することはできません。これを使用すると、最後に計算されたROCKであるUSL値のみが取得され、それがすべてのグラフ(プラスチック、綿、紙、岩)にプロットされるためです。 その場合、USL の線は 1 つのグラフだけが正しく、残りのグラフは間違っています。
これを行う方法を探していますが、どこにもたどり着けず、ここにいる皆さんの助けが本当に必要です。 皆さんのご協力に本当に感謝しています。
dt = Open ("C:\*\data_table.csv");
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE );
);
Summary(
Group(:TYPE ),
Mean( :NUMERIC_RESULT ),
Std Dev( :NUMERIC_RESULT )
);
New Column( "lower_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
LSL = :Name( "Mean(NUMERIC_RESULT)" ) - 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
New Column( "upper_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
USL = :Name( "Mean(NUMERIC_RESULT)" ) + 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
wait (1);
dr = Fit Group (
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE )
);
SendToReport(Dispatch({"Distributions TYPE=Cotton","NUMERIC_RESULT"},"1",ScaleBox,
{Min( LSL - 1 ), Max( USL + 1 ), Inc( 0.005 ), Minor Ticks( 1 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Plastic",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.1 ), Max( 0.4 ), Inc( 0.005 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Rock",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.01 ), Max( 3.5 ), Inc( 0.01 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
)<<REPORT></REPORT>
Re: 一時変数の計算式を作成するやあ@mhalwi 、
正確に何を質問しているのかわかりませんが、2 つの推測があるので、どちらかが正しいことを願っています。
まず推測します。テキスト型の列、次に等号、次に min 列の値を返す数式を作成しようとしているのでしょうか。 数式列内の次の数式は、これを実現します。
Concat(:Type," = ",Char(:Min))
次のようなテーブルを返します。
役立つ場合に備えて、サンプルテーブルを添付しました。
2 番目の推測: type 列のセルにちなんで名付けられた新しい変数を min 列の値に設定したいと考えています。 別の言い方をすると、上の表の列 4 のテキストを評価したいとします。 それが目的の場合 (そしてこのテーブルを作成した場合)、次の JSL を実行できます。
For Each Row(Eval(Parse(:Column 4)));
ただし、評価するためだけにその列を作成するのは、おそらく最も節約的なアプローチではありません。 これを行おうとしている場合、次のようにすると、数式列を作成せずにこれらの変数が設定されます。
For Each Row(Eval(Parse(Concat(:Type," = ",Char(:Min)))))
これら 2 つの回答のいずれかがお役に立てば幸いです。
@ジュリアン
Re: 一時変数の計算式を作成する@mhalwi 、
あなたが何をしようとしているのか理解できているかどうかわかりません。 ただし、私が理解したことに基づいて説明してみます。
以下に、あなたがやろうとしていることについての私の解釈を示します。 基本的に、データの分布をプロットして、タイプの最小値を確認できるようにします。 以下に示すグラフはそれを実現していると思います。
これがあなたが望んでいることではない場合は、あなたがやろうとしていること (Excel で実行したもの) のスクリーンショットをいくつか提供していただけますか。そうすれば、コミュニティがあなたが達成しようとしていることを支援できるようになりますか?
