將 80 個唯一值減少到 10 個唯一值我的數據表中有一列包含 80 多個唯一(標稱)文本值。 我想將這 80 個標稱值減少到 JSL 中的 10 個,方法是將未進入前十名(按出現次數)的值組合到稱為“其他”的組中。 在 JSL 中完成此操作的最簡單方法是什麼? 感謝您的幫助!
回复:將 80 個唯一值減少到 10 個唯一值@twillkickers ,您的問題的答案是“是”,使用 JSL,您可以操縱圖形生成器或帕累托圖來提供您正在尋找的顯示。 但是,Graph Builder 中的 Packed Bar 選項幾乎可以為您提供所需的一切(除了底部原因組合總數的標籤)。 如前所述,要顯示此總數將需要進行一些操作。 在決定額外操作是否值得之前需要考慮的一點是,這個總數實際上是冗餘信息——相對條形高度和 y 軸在視覺上傳達了這個信息。
也就是說,如果您仍然需要顯示“其他”列的總數,您可以採用以下方法(仍以 Nicardipine.jmp 為例):
使用之前提供的分發平台腳本為原因級別(1-9 和 10+)創建一個列
為您的新類別創建一個公式列,即:
If( :Level Investigator Name < 10, :Investigator Name, "Other")
使用 Graph Builder 為按級別列排序的新類別創建條形圖(假設您希望“其他”類別位於右側,否則,只需右鍵單擊軸並選擇按計數排序以查看“其他”適合的位置在您的前 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" ) ) )
);
所有這些操作都可以粘貼在一起以創建一個腳本。 如果您需要這方面的幫助,我建議您查閱幫助->書籍->腳本指南和幫助->腳本索引並蒐索“新列”以獲取在數據表中創建新公式列的語法。
回复:將 80 個唯一值減少到 10 個唯一值@jerry_cooper謝謝。 我對帕累托圖有疑問。 JSL 能否自動獲取除前十名原因之外的所有原因並將它們分組到“其他”條中,而不是我必須指定我想要單獨分組在一起的原因? 當我告訴圖形生成器將前 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 在每次生成帕累托圖時自動重新計算前十個原因。
回复:將 80 個唯一值減少到 10 個唯一值@twillkickers ,你是對的,Packed Bars 圖表將只顯示主要條形圖的值。 如果您必須顯示值,最簡單的方法可能是使用 Pareto Plot 選項(請注意,我已關閉累積百分比曲線並從“原因”紅色小三角菜單中選擇標籤和統一顏色):
回复:將 80 個唯一值減少到 10 個唯一值@jerry_cooper , 感謝您的幫助! 使用“打包”欄樣式時,有沒有辦法用其他類別標記欄? 我的每個金條的數量標籤只出現在非包裝金條上。 感謝您的幫助。
回复:將 80 個唯一值減少到 10 個唯一值你好@twillkickers ,
我不確定您的請求的最終目標是什麼,但如果是創建 pareto 樣式的圖表,您可以在不編寫腳本或創建新列的情況下完成此操作。
如果您使用的是版本 14,則圖形生成器中新的“Packed Bars”元素將執行您所描述的操作。 使用 Sample Data 目錄中的 Nicardipine.jmp 數據表,將 Investigator Name 列拖到 Y 角色,然後選擇“Packed”作為 Bar Style,在 Packed Primaries 中鍵入 9,最後,從中選擇“Separate Stack”打包放置下拉列表:

另一個選項,特別是對於 v14 之前的版本,您可以從質量和過程菜單中選擇帕累托圖。 從圖中的紅色三角形菜單中,選擇 Causes=>Combine Causes 菜單項,選擇“Last causes”單選按鈕,然後在數字框中輸入 71:

如果您真的想要一個腳本來創建一個級別為 1-10 的新列,以下(使用分發平台)是一種方法。 只需在適當的地方替換您的數據表和列名:
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;
希望這可以幫助。
回复:將 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; 回复:將 80 個唯一值減少到 10 個唯一值如何創建一個列出唯一文本值頻率的列?
回复:將 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;