スクリプトでの反復したがって、このデモでは、反復に For 関数を使用する方法を示します。 ここまでは、スクリプト エディタをログと共に使用して、スクリプトをテストし、結果を観察しました。 しかし、ここではデバッガーを使用してそれを確認したいと思います。 スクリプト エディタ ウィンドウを開いているので、「Names Default to Here」と入力することから始めます。 そして、今はスペースを追加していないブール値を入力します。 実際には、すべてを 1 行に入力してから、自動再フォーマットでクリーンアップしてもらいます。 セミコロンを入力してから、For、開き括弧、等号セミコロン、b 等号セミコロン、i 等号コンマを入力します。つまり、3 つの変数を初期化しています。 次に、i がコンマよりも小さいテストを入力します。次に、b と i の両方を更新します。 つまり、b は update-- b+ equal これがインプレース代入関数、関数への追加です。b の現在の値を上書きし、セミコロンで増加させます。これは、2 つのことを更新しているためです。 、再び、i に追加する後置インクリメント演算子です。 次にコンマ、そしてこの単純なループの本体が Show 関数になります。 そして、a、コンマ、b、コンマを表示してから、実際に演算子を使用して乗算関数を呼び出します。つまり、a かける b です。 次に、すべての括弧を閉じてセミコロンを追加し、右クリックして再フォーマットします。 ここで注目すべき点が 2 つありますが、1 つは、JMP が追加のセミコロンをいくつか追加したことです。 この最初の引数で関数をくっつけていることがわかりました。 3 番目の引数で関数をくっつけていることがわかりました。 そして、これらのセミコロンを追加しました。 彼らは傷つけません。 実際には、追加するつもりがない限り、それらは必要ないため、おそらくスクリプトから削除します。つまり、より多くの関数を結合します。 もう 1 つの方法は、これを並べ替えて、各引数に独自の行を持たせることです。 しかし、デバッガーに入ったときに、これをコース PDF にあるものと一致させたいと考えています。 したがって、セミコロンを削除する以外は、JMP が再フォーマットした方法のままにします。 したがって、デバッガーを起動するにはいくつかの方法があります。 [編集] メニューに移動すると、[スクリプトのデバッグ] オプションがあります。 キーボード ショートカットが Ctrl+Shift+R であることがわかります。 ここでは、[スクリプト エディター] ウィンドウで [デバッグ] ツールバー ボタンをクリックできます。 または、右クリックして [スクリプトのデバッグ] を選択することもできます。 これが最後に紹介するものなので、先に進んでその方法を使用します。 したがって、このデバッガーは JMP の 2 番目のインスタンスです。 また、JMP の元のインスタンスは一時的に中断されます。 そのため、スクリプトに必要なダイアログ ボックスなど、なんらかの操作がある場合、そのアクションを実行するまでデバッガ ウィンドウは中断されます。 そして、それが完了すると、制御がデバッガーに返されます。 デバッガーの使用が終了したら、デバッガーを閉じます。 右上隅の X またはツールバーの [停止] ボタンを使用できます。 これで、JMP の元のインスタンスに戻ります。 まず、ブレークポイントを設定せずに、このループをそのまま実行します。 そして、ここには2つのボタンがあります。 1 つは Run で、もう 1 つは Run without breakpoints です。 現時点ではブレークポイントがないため、これらは同じことを行います。 今すぐ使用したいブレークポイントがある場合は、左端にあるこのボタンを使用します。 では、それをクリックします。 そして、すぐに再起動しない限り、プログラムの実行が終了したことを知らせてくれます。 唯一のオプションは、デバッガーを閉じることです。 しかし、再起動する前に、スクリプトが表示されているパネルの下にある [ローカル] タブに移動したいと思います。 そして、デフォルトの名前空間は Here です。これは、私がオンラインで呼び出したものです。スクリプトの実行の最後に、a の値は b の値は i の値はデバッガーは、反復の各ステップで a、b、および i の値を調べます。 では、その [再起動] ボタンをクリックします。 そして、次の行にブレークポイントを追加したいのですが、そのためには、行番号のすぐ右をクリックします。 また、必要な数のブレークポイントを設定できます。 この単純なスクリプトでは、実際に必要なのは 1 つだけです。 つまり、行を評価して、Here 名前空間を設定するということです。 そして for ループ内で、初期化引数を評価します。 テストを評価します。 単なる Show 関数である for ループの本体を評価します。 次に一時停止すると、[ローカル] タブに値が表示されます。 それに話を戻します。 そして、[実行] をもう一度クリックすると、更新、テスト、本体の実行、一時停止が行われ、それらの値が表示されます。 そして、テストが失敗してループを終了するまで、これを続けます。 だから私は何も選択したくない。 左側の実行ボタンを使用します。 繰り返しますが、ブレークポイントなしで実行したくありません。 だから私はこれを実行します。 そして、それを評価した後、行で停止したことがわかります。 また、a、b、および i の値は、それぞれ および です。 反復の次のステップを実行するには、[実行] ボタンをもう一度クリックします。 そして今、a、b、i の値がそれぞれ and であることがわかります。 そしてもう一度走れる。 そして、a、b、i の最終値に到達します。 そして、プログラムの実行が終了したというメッセージが表示されます。 また、他にやりたいことがあれば、再起動することもできます。 停止ボタンをクリックできます。 または、右上隅の X を使用して閉じることもできます。 そして、[停止] ボタンをクリックします。 これで、JMP の元のセッションに制御が戻ります。 ここで、製造中のコンパウンドの硬化時間を測定したとします。 また、すべての実行は製造中に 5 回サンプリングされ、各サンプルのこの硬化時間を決定します。 そして、各サンプルの硬化時間の分布を見たいと思います。 コースジャーナルのセクションで Cure Time Data をクリックします。 スクリプトを作成する際に推奨することの 1 つは、インタラクティブに試して、実行しようとしていることが実行可能であることを確認することです。 硬化時間のヒストグラムが必要なので、簡単な例から始めます。 [分析] メニューに移動し、[分布] を選択します。 そして、そのY役にキュアタイムを入れます。 繰り返しますが、ここでの役割は Y であることを思い出してください。 [OK] をクリックします。 それでこれを見て、まあ、これは素晴らしいと思います。 これは、私の 5 つの硬化時間分布すべてにまさに求めているものです。 それが私が使いたいプラットフォームです。 そして、このレポートを再現するスクリプトの小さなテンプレートをまとめました。 ホームウィンドウに戻って開きましょう。 したがって、配信プラットフォームの起動、その Y ロール、および文字列として Cure Time を使用した列関数を使用したこのスクリプトは、そのレポートを再作成します。 ということで、このテンプレートをもとにループを書いていきます。 そこで、この Cure Time ウィンドウを閉じて Script Editor に戻り、内容をクリアして、同じウィンドウをそのまま使用できるようにします。 繰り返しになりますが、Names Default to Here でスクリプトを開始します。 前と同じように、自動再フォーマットを使用して JMP にスクリプトをクリーンアップさせます。 したがって、私の for ループは引数 c で始まります。 そして、c に の値を代入します。 初期化する変数はこれだけです。 カンマを入力します。 テストは、c が列数よりも小さくなります。 大規模なデータ テーブルを操作している場合のベスト プラクティスは、ループの外側で列の数を数え、その結果を変数に格納し、その変数を使用することです。 c を比較しています。 この場合、2 番目の列から開始するため、5 列です。 全部で5列です。 そのため、毎回このカウントをやり直すことについてあまり心配していません。 しかし、ベストプラクティスはそれを引き出すことです。 その後、コンマを入力します。 update 引数は単に c とポスト インクリメント演算子、2 つのプラス記号、もう 1 つのコンマです。次に、Distribution を括弧で囲んで y と入力し、再び括弧を開いて column と入力し、c-- と入力します。カウンター -- それらの括弧内。 そして、すべての括弧が一致していることを確認するために、ここで矢印を付けます。 実際、ここで右括弧が欠けていて、再フォーマットしようとすると、何かが足りないというメッセージが表示されます。 したがって、実際に再フォーマットすることは、デバッグを行うための簡単な方法です。 セミコロンを入力します。 次に、[スクリプトの再フォーマット] ボタンを使用します。 次に、スクリプトを実行します。 スクリプトをそのまま作成すると、硬化時間の値を観察するたびに個別のウィンドウが表示されます。これは、配布を起動しているためです。[スクリプト エディター] ウィンドウに戻ると、配布プラットフォームを再度起動しています。繰り返しのすべてのステップで。 しかし、分布に精通している場合は、[分析] メニューに戻り、[分布] を選択して、5 つの硬化時間の値すべてをその Y ロールに入れます。 ディストリビューションに精通している場合は、それらすべてを同じウィンドウで取得できることをご存知でしょう。 そのため、Journal には、すべての列名でその Y ロールを構築し、同じウィンドウで 5 つの分布すべてを含む同じレポートを生成するためにループするように事前に作成されたスクリプトがあります。 そのため、それを開始する前に、これらのレポート ウィンドウをすべて閉じたいと思います。 メニュー バーに移動し、[ウィンドウ] の下にある [すべてのレポートを閉じる] を選択します。 そして、ジャーナルを見つけます。 Cure Time Distributions というスクリプトをクリックします。 そして、デバッガーでこれを実行します。 そのため、ここではスクリプト エディター ウィンドウではなく、デバッガー環境の各ステップで何が起こっているかについて説明します。 そこで、右クリックして [スクリプトのデバッグ] を選択します。 繰り返しになりますが、デバッガーを起動するには複数の方法があることを思い出してください。 そして、前の単純な例で行ったように、反復の各ステップで何が起こるかを確認するために、行にブレークポイントを追加したいと思います。 また、c 変数と yCol 変数にも監視を追加したいと考えています。 [ウォッチ] タブに移動します。 緑色のプラス記号をクリックしてウォッチを追加します。 これは、スクリプト内の特定の変数を調べる方法です。 ここでは、変数はあまり多くありません。 ただし、多くの変数を含む大きなスクリプトがあり、デバッグ中に監視する必要があるのはごくわずかである場合は、[ウォッチ] タブを使用すると、そのための優れた方法になります。 緑色のプラス記号をクリックして時計を追加します 変数 c を入力し、[OK] をクリックします。 そして、変数 yCol にもウォッチを追加したいので、[OK] をクリックします。 これを実行する前に、スクリプト全体で何が起こっているかについて少しお話ししたいと思います。 そして、デバッガーを実行するプロセスを進めながら、それを確認します。 そのため、最初の行で yCol という変数を作成しています。 そして、yCol は配布プラットフォームの Y 分析ロールを格納し、その後に空の括弧が続きます。これは、Y ロールの後の括弧に列名を追加することで、ループがこの式を構築するためです。 これを Expr で引用しているのは、単に yCol と言って、その後に括弧を付けて値 y を代入しようとすると、JMP がこれを定義済みの変数として認識しないため、エラーが発生するからです。 関数として認識しません。 したがって、JMP が評価しようとせずに、このリテラル値を yCol に格納したいだけです。 それがラインが行うことです。 以下の行は for ループで、列から始めます。列がなくなるまで繰り返します。 繰り返しになりますが、本番レベルのスクリプトでは、特に大きなデータ テーブルがある場合は、ループの外側で列の数をカウントし、それを変数に入れたいと考えています。 次に、for ループの本体は列 c を追加するだけなので、この最初の列は yCol に格納されている式に丸められます。 また、Insert Into は最初の引数を評価しようとしません。 したがって、yCol 変数で特別なことをする必要はありません。 単にそれを見て、操作を実行します。この場合、列を y の後の括弧に追加します。 Show 関数は、各ステップで何が起こっているかを説明するためのものです。 Debugger を使用していなければ、その部分がログに表示されます。 したがって、値を監視しています。これは、Show 関数を使用するのと同じです。 更新します。 テストを行い、c がまだ列数以下であると仮定して、次の列を yCol に挿入します。 次に、ループが完了すると、つまり、列がなくなると、コードの最終行ができます。これについて詳しく説明します。 挿入関数を使用して分布式を変更します。 ディストリビューションは JMP に組み込まれたプラットフォーム起動であるため、Insert Into ではなく Insert を使用します。 ユーザーは、ディストリビューション自体を実際に変更することはできません。 分布を使用する式を変更できます。 そこで、インサートを使用します。 次に、Expr関数で分布をラップして、JMPが分布を評価しようとしないようにします。 私がローンチした場合、これをハイライトしますが、このコード行のこの部分を実行すると、JMP は、Y ロールで必要な引数が与えられていないと言うでしょう。 それで、配信プラットフォームの立ち上げが可能になります。 そして、ユーザーは列を挿入しますが、実際にはそうしません。スクリプトの目的を無効にしてしまいますよね? それが最初の引数です。 2 番目の引数 -- 2 番目の引数として yCol を入れると、JMP はそれを評価しようとします。 そして、ループを実行した後、どのように見えるかがわかります。 しかし、括弧と一連の列名が付いた大文字の Y だけが表示されます。 そして、それはJMPが何をすべきかを知っているものではありません. それを変数名や関数として認識しません。 そのため、Name Expr を使用すると、格納されているものと yCol を評価せずに調べることができます。 そして、yCol に格納されている評価されていない式は、配布後に括弧に入れられるものです。 それを行っても、すべての列に Y ロールがある分布はまだ引用されているため、全体を Eval でラップします。 そして、JMP の通常のインスタンスに戻って、それをもう少し詳しく説明します。 だから私は私の時計を持っています。 そして現在、変数は未定義です。 それが値として表示されます。 最初のブレークポイントまで走りましょう。 そして、更新前の最初の実行の後、c は yCol の値を保存します。空の括弧付きの Y の代わりに、Column Cure Time があります。 Debugger がアクティブなため、そこに移動できませんが、それが 1 つの列だけの分布を生成することになります。 そのため、次の反復でもう一度実行します。 ここで、c は等しくなり、y 分析ロールは 2 つの硬化時間列を開始します。 また走ります。 これで 3 つになりました。 そして、私はそれを続けることができます。 バックグラウンドのログで、Show 関数によりこれらの結果が表示されていることがわかります。 ですから、ループを抜けるまでそれを続けます。 また、5 つの硬化時間列はすべて保存されています。これは、JMP の通常のセッションのログで簡単に確認できますが、現在はすべて yCol に保存されています。 したがって、プログラムの実行は終了しました。 先に進み、デバッガーで [停止] をクリックします。 そして、最後の行が評価されました。 そして、同じウィンドウに 5 つのヒストグラムすべてを含む硬化時間の分布があります。 スクリプト エディタ ウィンドウに戻って、この行について簡単に説明しましょう。なぜなら、式を内部から構築する方法を考えることが重要だからです。 ですから、これを実行して大量のエラーを作成して、なぜこのように記述したのかを明確にするつもりです。 そこで、事前に書いた行をコメントアウトします。 デバッガー インスタンスで説明した方法に戻りますが、Insert という単語を入力します。 また、スクリプト作成に慣れていない場合は、Insert をいつ使用するか、Insert Into をいつ使用するかについて、少し試行錯誤するかもしれません。 しかし、この場合も、特定の分析ロールまたは分析ロールの特定の列を持つプラットフォームを起動する必要があります。 しかし、プラットフォームを変更することはできません。 ユーザーが作成した変数のみを変更できます。 これらは L 値と呼ばれます。 それでは、これを試してみましょう。 その起動に Distribution と入力し、括弧を開き、括弧を閉じ、カンマを入力して、yCol を挿入してみます。 繰り返しますが、私は単純な観点から、yCol に格納されているものと配布後の括弧が必要であると考えています。 では、この 1 行を実行するとどうなるか見てみましょう。 [エラー チャイム] 名前が未解決というエラーが表示されます。 すべての列の Y のアクセスまたは評価における Y。 したがって、私がそれを却下した場合、それはJMPがこれを評価しようとしたことを意味します. できませんでした。 そのため、エラーが発生しました。 したがって、これは完了しませんでした。 繰り返しますが、格納された式または引用符で囲まれた式を評価せずに取得する必要があるときに使用する関数は Name Expr です。 だから私はラップするつもりです--おっと--開き括弧。 Name Expr で yCol をラップします。 そして、これをテストするかもしれません。 それで何が起こるか。 yCol を実行したところ、先ほどのエラーが表示されました。 Name Expr yCol を実行すると、ログに表示されます。おっと、これのサイズを変更しようとしています。 ログを見ると、JMP がエラーを出していないことがわかります。 引用された式を返すだけです。 さて、今度は line を実行しようとしましたが、問題は、今回は JMP の yCol 変数に問題はありませんでした。 しかし今では、その必要な値なしで配布が見られました。 したがって、JMP にこのプラットフォームを立ち上げてほしくありません。 そこからキャンセルします。 ディストリビューションを Expr でラップしたいので、JMP はそれを評価しようとしません。 繰り返しますが、それを強調表示して実行し、テストするだけで問題ありません。 これを実行してログを見ると、実行したコード行があります。 Y ロールとその中に含まれるすべての列を含む分布の結果を次に示します。 最後の部分は、行で見たように、この全体をラップすることです。これはこれを行う 1 つの方法にすぎませんが、行全体を Eval 関数でラップします。 そして、私はそれを実行します。 また、すべての配布レポートを含む別の配布ウィンドウがあります。 ですから、これを開発する際にいくつかのエラーを経験したかったのは、なぜ私たちがこれらのことを私たちのやり方で書いているのかを人々が理解するのに役立つと思うからです. もう 1 つ言及しておくと、一般的に推奨されることは、最初の硬化時間の分布を行ったとき、覚えていると思いますが、[分析]、[分布] に移動し、単純に [硬化時間を Y] ロールに配置し、[OK] をクリックしたことです。 JMPがこのために作成するスクリプトを取得し、それをベースとして、この場合はこのループを作成することをお勧めします。 そして、ディストリビューションでそれをしなかった唯一の理由は、私が y 分析の役割を持っている構文が古い構文だからです。 分布の横にある赤い三角形に移動して [スクリプトをスクリプト ウィンドウに保存] を選択すると、新しい構文では、列ごとに個別に連続分布か名義分布かが指定されます。 そのため、そのループでは、古い構文よりもスクリプトが少し多くなります。 古い構文は正常に機能します。 しかし、おそらくこの新しい構文を使用することをお勧めします。 もう少し複雑なループです。 しかし、ほとんどのプラットフォームでは、JMP が作成するスクリプトを使用しても問題ありません。 このスクリプト ウィンドウを閉じます。 そして、インタラクティブに何かを行うもう 1 つの例を見ていきます。 今回は、そのスクリプトをキャプチャします。 ただし、私のループは事前に作成されています。 5 つの硬化時間値すべての管理図を見たいとします。 それでは、分析メニューに移動してインタラクティブに開始します。 [品質とプロセス] で、[管理図ビルダー] を選択します。 Day をそのサブグループの役割に、Cure Time を Y の役割に入れたいと考えています。 そして自動的に、管理図ビルダは硬化時間の個々の測定値と移動範囲図を表示してくれます。これが私の出発点です。 [完了] をクリックして、コントロール パネルを非表示にします。 次に、[管理図ビルダー] と [スクリプトをスクリプト ウィンドウに保存] の横にある赤い三角形に移動します。 このスクリプト エディタ ウィンドウ、このスクリプト エディタ ウィンドウです。その結果を再現する管理図ビルダーが含まれるようになりました。 ここで、事前に作成したスクリプトと一致させるために、サイズを設定する行を削除します。 もちろん、これを行う必要はありません。 デモンストレーションのためにこれを単純化しています。 つまり、管理図ビルダーがプラットフォームの起動であることがわかります。 そして、いくつかのオプションがあります。 そのブール値を使用してコントロール パネルを非表示にしています。機能は表示されていません。 そして、この変数の役割があります。 また、変数の役割にはサブグループがあります。 これは、すべての硬化時間の値で同じになります。 そして、硬化時間の Y の役割があります。この場合は硬化時間です。つまり、実際に行う必要があるのは、3 つのことを構築することです。 硬化時間列を使用してその y 分析ロールを構築し、追加して変数部分を構築する必要があります。Y ロールのすべての硬化時間列を取得したら、ここに追加します。 次に、その変数を管理図ビルダーの起動に取り込みます。 それではジャーナルに戻り、Cure Time Control Charts をクリックしてみましょう。 繰り返しますが、y 分析の役割を構築する 3 つの部分です。 そして、それは私たちが行ったこととまったく同じです-これらの行は、私たちが行ったこと、配布で見たものとまったく同じです. そして、変数に別の命名規則を使用しているだけです。 次に、変数部分を構築します。 そのため、挿入関数を使用しています。 サブグループ Day の変数があります。これは、すべての硬化時間の値で同じになります。 しかし、JMP に単語変数を評価させたくありません。 エラーが発生します。 だから私は Expr を使用します。 そして、そのスクリプトの配布と同じように、yExpr に格納されている列のリストを取得し、それを変数部分に追加しています。 次に、このスクリプトでは、実際に、変数部分を除いた管理図ビルダーの基本テンプレートを作成し、それを変数 ccExpr に格納しています。 最後に、変数の行を追加します。 繰り返しになりますが、バックグラウンドでそのコードを見ると、その変数行が管理図ビルダーの起動に追加されます。 この場合、これらの両方に Name Expr を使用しました。これは、既に定義した引用符付きの式だからです。 この挿入関数を eval でラップするのではなく、その結果を独自の変数に格納します。 そして、スクリプトで cc を使用すると、作成された式が評価されます。 ただし、これをデバッガーに取り込んでみましょう。 右クリックして [デバッグ] を選択します。 [Watch] タブに移動します。 また、他のスクリプトから現在のウォッチ変数を削除したいので、ボタンをクリックしてすべてのウォッチを削除します。 次に、このスクリプトの 4 つの変数に 4 つの監視を追加します。 緑のプラスをクリックします まず、yExpr と入力して [OK] をクリックします。 緑のプラス記号をもう一度クリックして、varExpr を追加します。 大文字にしたかどうかは問題ではありませんが、このスクリプトのテキストの内容と一致させたいだけです。 [OK] をクリックします。 ccExpr を追加したい。 [OK] をクリックします。 最後に、cc を追加して、[OK] をクリックします。 ここでは 3 つの異なる場所で停止したいので、3 つのブレークポイントを配置します。 最初のブレークポイントがオンラインになります。これにより、反復の各ステップで何が起こっているかがわかります。 次のブレークポイントがオンラインになるので、一時停止して varExpr に格納されているものを確認します。 そして最後に、ブレークポイントをオンラインにして、cc に何が格納されているかを確認します。 そして、これを却下すると、それが評価されます。 [ステップ オーバー] ボタンを使用してデバッガーを実行します。 だから私はそれをクリックします。 行が評価され、ループに入ります。 下の [Watch] タブを見ると、現在保存されているものと yExpr を確認できます。 そしてもう一度 [ステップ オーバー] をクリックすると、最初のブレーク ポイントに移動します。 Step Over を 3 回クリックすると、yExpr に Column Cure Time が含まれていることがわかります。 [ステップ オーバー] をもう一度クリックして、そのブレークポイントに移動します。 もう一度クリックします。 そして、その Y ロールに Cure Time を挿入しました。 したがって、for ループが完了するまで、これを続けます。 これを表示すると、5 つの硬化時間列すべてが Y の役割にあることがわかります。 これで、行は varExpr を定義します。 これは、サブグループ Day を持つ変数であり、次にそれらすべての列を持つ Y ロールです。 [Step Over] をもう一度クリックすると、ccExpr を定義した場所に移動します。 また、[監視] タブでも、管理図ビルダーの起動を保存しているだけで、重要な部分が欠落していることがわかります。 そして、ラインはすべてをまとめる場所です。 だから私はもう一度ステップオーバーします。 これを調べたい場合は、管理図ビルダー、コントロール パネルの表示などに、varExpr に格納されている値が追加されています。 [ステップオーバー] をもう一度クリックします。 プログラムの実行が終了します。 [停止] をクリックします。 JMP の通常のセッションに戻ると、硬化時間などの個々の測定値と移動範囲のグラフがあることがわかります。 これらの例では、For 関数の使用、Expr の使用、Insert を使用した Name Expr 関数、およびこれらの単純なコンテキストでのデバッガーの使用方法を検討しています。 ジャーナルに戻って、スクリプト ウィンドウへの変更を保存せずに、[すべて削除] [すべて保存] をクリックします。 以上で、このデモンストレーションを終了します。