80個の一意の値を10個の一意の値に減らすデータテーブルに、80を超える一意の(公称)テキスト値を持つ列があります。 これらの80の公称値を取得し、(発生量で)上位10に含まれない値を「その他」と呼ばれるグループにまとめることにより、JSLで10に減らしたいと思います。 JSLでこれを実現する最も簡単な方法は何ですか? ご協力いただきありがとうございます!
Re:80の一意の値を10の一意の値に減らす@twillkickers 、あなたの質問に対する答えは「はい」です。JSLを使用すると、グラフビルダーまたはパレート図のいずれかを操作して、探している表示を提供できます。 ただし、Graph Builderの[パックされたバー]オプションを使用すると、必要なほとんどすべてのものを取得できます(最下位の原因の合計のラベルを除く)。 この合計を表示するには、前述のように操作が必要になります。 追加の操作が努力に値するかどうかを決定する前に考慮すべきことは、この合計が実際には冗長な情報であるということです。相対的なバーの高さとy軸がこの情報を視覚的に伝えます。
それでも、「その他」の列の合計を表示する必要がある場合は、次の方法を使用できます(例としてNicardipine.jmpを使用します)。
以前に提供された配布プラットフォームスクリプトを使用して、原因レベル(1〜9および10+)の列を作成します
新しいカテゴリの数式列を作成します。例:
If( :Level Investigator Name < 10, :Investigator Name, "Other")
グラフビルダーを使用して、[レベル]列で並べ替えられた新しいカテゴリの棒グラフを作成します(「その他」カテゴリを右側に配置する場合は、軸を右クリックしてカウント順に選択し、「その他」がどこに収まるかを確認します。あなたのトップ9の原因の範囲内):
Graph Builder(
Size( 869, 318 ),
Show Control Panel( 0 ),
Variables(
X(
:New Investigator Name,
Order By(
:Level Investigator Name,
Ascending,
Order Statistic( "Sum" )
)
)
),
Elements( Bar( X, Legend( 3 ), Label( "Label by Value" ) ) )
);
これらのアクションをすべて貼り付けて、スクリプトを作成できます。 これについてサポートが必要な場合は、[ヘルプ]->[書籍]->[スクリプトガイド]および[ヘルプ]->[スクリプトインデックス]を参照し、[新しい列]を検索して、データテーブルに新しい数式列を作成するための構文を取得することをお勧めします。
Re:80の一意の値を10の一意の値に減らす@jerry_cooperありがとうございました。 パレート図について質問があります。 JSLは、グループ化する原因を個別に指定する代わりに、上位10の原因以外のすべてを自動的に取得して、「その他」のバーにグループ化できますか? グラフビルダーに最初の10個の値以外のすべてをグループ化するように指示すると、JSLコードは次のようになります。
Pareto Plot(
Cause( :Cause ),
Show **bleep** Percent Curve( 0 ),
Combine Causes(
{"Cause1","Cause2","Cause3","Cause4","Cause5","Cause6"}
),
SendToReport(
Dispatch( {"Plots"}, "102", ScaleBox, {Max( 4512.67559361611 )} ),
Dispatch( {"Plots"}, "106", ScaleBox, {Max( 100.059325800801 )} ),
Dispatch( {"Plots"}, "Pareto Report", FrameBox, {Frame Size( 1061, 702 )} )
)
);私のアプリケーションでは、原因の優先順位が時々変わる可能性があります。 パレート図が生成されるたびに、JSLが上位10の原因を自動的に再計算するようにしたいと思います。
Re:80の一意の値を10の一意の値に減らす@twillkickers 、正解です。パックバーチャートには、プライマリバーの値のみが表示されます。 値を表示する必要がある場合、最も簡単な方法は、パレート図オプションを使用することです(累積パーセント曲線をオフにして、[原因]の赤い三角形メニューから[ラベル]と[均一な色]を選択したことに注意してください)。
Re:80の一意の値を10の一意の値に減らす@jerry_cooper 、 ご協力いただきありがとうございます! 「パック」バースタイルを使用する場合、バーに他のカテゴリのラベルを付ける方法はありますか? 各バーの数量ラベルは、パックされていないバーにのみ表示されます。 ご協力いただきありがとうございます。
Re:80の一意の値を10の一意の値に減らすやあ@twillkickers 、
リクエストの最終的な目標はわかりませんが、パレート図を作成する場合は、スクリプトを作成したり、新しい列を作成したりしなくても、これを実現できます。
バージョン14を使用している場合、GraphBuilderの新しい「PackedBars」要素が説明内容を実行します。 サンプルデータディレクトリのNicardipine.jmpデータテーブルを使用して、Investigator Name列をYロールにドラッグし、バースタイルとして「Packed」を選択し、Packed Primariesに9と入力して、最後に「SeparateStack」を選択します。パック配置ドロップダウン:

別のオプション、特にv14より前のバージョンの場合、[品質とプロセス]メニューから[パレート図]を選択できます。 プロットの赤い三角形メニューから、[原因] => [原因の組み合わせ]メニュー項目を選択し、[最後の原因]ラジオボタンを選択して、番号ボックスに71と入力します。

スクリプトでレベル1〜10の新しい列を作成する必要がある場合は、次の方法(Distribution Platformを使用)が1つの方法です。 必要に応じて、データテーブルと列の名前を置き換えてください。
Names Default to Here( 1 );
dt = Open("$Sample_Data/Nicardipine.jmp");
dist = Distribution( Nominal Distribution( Column( :Investigator Name ) ) );
dist << Order By( Count Descending );
dist << Save( Level Numbers );
dist << Close Window;
therows = dt << Get Rows Where( :Level Investigator Name >= 10 );
dt:Level Investigator Name[ therows ] = 10;
お役に立てれば。
Re:80の一意の値を10の一意の値に減らす@twillkickers 、
あなたがやりたいことをする方法はたくさんあります。 表形式、配布、要約など。 サマリーアプローチを使用して実装する方法を示します
// Open Sample Data Table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Get frequency
dt1 = dt << Summary(
Group( :name ),
Freq( "None" ),
Weight( "None" )
);
// Let us assume weight column in this data table represents the frequency in your case
dt2 = dt1 << Sort(By(:N Rows),Order(descending));
// Select only top 10
dt2 << Select Rows(Index(1,10));
// If you want to hide and exclude the remaining
dt2 << Invert Row Selection << hide and exclude ;
// OR
// If you want to delete the rows
dt2 << Delete Rows; Re:80の一意の値を10の一意の値に減らす一意のテキスト値の頻度を一覧表示する列を作成するにはどうすればよいですか?
Re:80の一意の値を10の一意の値に減らす@twillkickers 、
一意のテキスト値のそれぞれの頻度または出現回数を一覧表示する列もありますか? そうでない場合、最初のステップはそのデータをデータテーブルに取り込むことです。 これが利用可能になったら、列を降順で並べ替えて、上位10行を選択できます。 これが私がそれをする方法です:
// Open Sample Data Table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Let us assume weight column in this data table represents the frequency in your case
dt1 = dt << Sort(By(:weight),Order(descending));
// Select only top 10
dt1 << Select Rows(Index(1,10));
// If you want to hide and exclude the remaining
dt1 << Invert Row Selection << hide and exclude ;
// OR
// If you want to delete the rows
dt1 << Delete Rows;