JMP スクリプトのループの問題こんにちは、質問が 2 つあります -
質問1 --
単純なデータ (添付) と正常に動作するスクリプトがありますが、それを for ループに変換したい限りです。 正しいことを理解していない。
目的 - 各電流の上位 10% の抵抗値が必要です。 私のデータは対称ではありません。これは、各電流のデータポイントの数が異なることを意味します。
同じデータには現在値が 7 つしかありませんが、実際のデータでは数百の値が取得される場合があります。
アプローチ -- 分位値テーブルを生成し、抵抗値を 90% 分位値で比較し、「Top10%」列を追加します。 7 つの現在値を持つサンプル データではすべてが正常に動作していますが、そのためのループが必要です。 スーパー ユーザーは、for ループで行っている間違いを指摘してもらえますか。これは、for ループの実装方法を学ぶのに役立ちます。
何か助けはありますか?
Ques2 --上位 95% のデータを取得する最良の方法は何ですか?
ここで何か助けはありますか?
高度な統計モデリング自動化とスクリプト作成データの探索と視覚化マスカスタマイゼーション品質およびプロセスエンジニアリングRe: ループ用の JMP スクリプトの問題明確で素敵な説明をありがとう。 列の数式がどのように機能するかを学ぶのに非常に役立ちます。 再度、感謝します。
Re: ループ用の JMP スクリプトの問題For() ループ ロジックについて
- 列には式を 1 つだけ含めることができます。For() ループ内に Formula 定義があると、ループごとに異なる式を指定することになります。JMP が何をするのか正確にはわかりませんが、せいぜい、新しい式が作成されると各式が置き換えられ、最終的には最後に作成された式だけになるだけです。
- 各 If 内で「Fail」値を設定すると、最後のレベルが現在の行のレベルである場合にのみ、ロジックが正確になります。それ以外の場合は、レベル 3 が指定された行の現在のレベルであるとします。JMP は、レベル 1 の If ステートメントの値を失敗、レベル 2 で失敗、レベル 3 で Top10% に設定しますが、For() ループが継続するため、レベル 4 のテストの結果は失敗になります... .....そして残りのすべてのレベル。
- 式の外で定義された変数値を持つ列の式 (つまり、dtF2、dtQ、および dtQ データ テーブル内の列への参照) では、データ テーブルに公式が開かれます。したがって、このような数式を使用する場合、データ テーブルで数式が実行されたら、その数式を削除する必要があります。
dtF2:Name("Top10%") << delete formula;
ここに、私がうまくいくと思う式のバージョンを示します。テストはしていませんが、アプローチはわかると思います。
dtF2 << New Column( "Top10%",
character,
FORMULA(
For( i = 1, N Rows( dtQ ), i++,
x = "";
If( dtF2:Current == dtQ:Level[i] & dtF2:Name( "Res" ) >= dtQ:Name( "90%" )[i],
x = "Top10"
);
);
If( x == "", x = "Fail" );
x;
)
);Re: ループ用の JMP スクリプトの問題はい、全く問題ありません。 はるかに優れた簡単な方法です。 集計表から分位点も取得できるとは知りませんでした。 ご説明いただいた方法で実装しています。
分位数と上位 10% データとは別に、「for ループ」の何が間違っていたのかコメントはありますか?
助けてくれてありがとう。
Re: ループ用の JMP スクリプトの問題以下のスクリプトは、望む結果を得るより簡単な方法だと思います。

Names Default To Here( 1 );
dtF2 = Data Table( "Final_Data" );
dtSum = dtF2 << Summary(
invisible,
Group( :Current ),
Quantiles( 90, :Res ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "stat" ),
link to original data table( 0 )
);
dtSum << delete columns( N Rows );
dtF2 << Update(
With( dtSum ),
Match Columns( :Current = :Current )
);
Close( dtSum, nosave );
dtF2 << New Column( "Top10%",
character,
formula( If( :Res >= :Quantiles90, "Top10" ) )
);