将 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;