如何使用一列对另一列进行“值排序”亲爱的 JMP 社区:
是否可以使用一列的数值(整数)作为对另一列进行“值排序”的方式?
我有一个文本列,我想根据另一个包含整数的列对其进行排序。 例如,我有一个名为 :Text 的列和一个名为 :Level 的列。

默认情况下,JMP 按如下方式对“值顺序”列属性进行排序:

我更喜欢这样排序:

在我的简单示例中,其顺序与 :Level 列的顺序相同。 当然,我可以手动执行此操作,但在我的真实数据表中,我有一个文本列,其中包含几十个条目,我不想手动执行此操作,而是使用列 :Level 来设置“值顺序”属性:Text 列的。
有没有办法编写脚本或通过 JMP 中的 GUI 来完成此操作?
谢谢!,
DS
高级统计建模自动化和脚本编写大规模定制回复:如何使用一列对另一列进行“值排序”这里的解决方案是使用关联数组,这要求您拥有唯一的键。 因此,如果您有重复的级别,您拥有的一些文本将被“删除”(我猜它们将按默认顺序排序)。
回复:如何使用一列对另一列进行“值排序”你好 !
我正在尝试按数字日期列的值订购一列(批次),但遇到一个问题,即同一天制造了两个不同的批次。
例如,为什么这不能正确排序?
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text",
Character,
"Nominal",
Set Values({"A", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD", "EE", "FF"})
),
New Column("Level",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10])
)
);
文本列的顺序如下:
文本等级
甲 1
乙2
d 3
F 4
AA 5
BB 6
CC 7
DD 8
EE 9
FF 10
C 2
乙3
而不是所需的:
文本等级
甲 1
乙2
C 2
d 3
乙3
F 4
AA 5
BB 6
CC 7
DD 8
EE 9
FF 10
C 2
回复:如何使用一列对另一列进行“值排序”我同意, @jthi解决方案是最好的。有些人不喜欢 JSL。很多人不知道行顺序级别。Excel 用户(即将发布概括性评论)希望将行顺序级别设置为默认值。所以,这就是我回答你的精细讨论问题的动机。
回复:如何使用一列对另一列进行“值排序”您好,是的,我现在明白为什么您需要取消选中自定义订单复选框了。 这就说得通了。 jthi 这样做的好处是,无论数据表的排序如何,它都会保持 :Text 列所需的值排序。回复:如何使用一列对另一列进行“值排序”我在描述要做什么时犯了一个错误。这是使用 Big Class 数据表的示例
- 我按身高t对数据表进行排序

- 然后,我进入“名称”列的列属性并选择“行顺序级别”,并且取消选择“自定义顺序”

- 然后我打开图形生成器并将名称列拖到 X 轴,可以看出,X 轴的顺序是名称的行顺序

回复:如何使用一列对另一列进行“值排序”你好@jthi ,
感谢您的反馈意见。 是的,这个 JSL 代码正是我所需要的,因为它可以处理 :Text 和 :Level 列的任何奇怪排列,然后适当地分配值顺序。
我还没有探索或使用关联数组命令进行太多工作,但显然我需要更多地研究它! 非常好,只有3行代码。
谢谢!,
DS
回复:如何使用一列对另一列进行“值排序”你好@tx尼尔森,
感谢您的反馈意见。 不幸的是,这个解决方案不适用于 :Text 列。 如果我根据 :Level 列对表进行排序,然后按照您建议的 :Text 列的值顺序应用“行顺序级别”,它仍然保留 :Text 列的 alpha 排序,这意味着 AA仍然在 A 之后,依此类推。
另一个“问题”是它弄乱了原始数据表中的行,这些行当前按日期排序。 :Text 和 :Level 列可以分散在整个日期中,有时保持表按日期排序会有所帮助。 这实际上并不是一个大问题,但我知道随后访问数据表的其他用户不会喜欢它。
谢谢!,
DS
回复:如何使用一列对另一列进行“值排序”你好@ron_horne ,
感谢您的反馈意见。 我熟悉在图形生成器中制作类似帕累托图的方法;用过很多次了,非常有帮助。 不幸的是,我正在对数据表进行许多其他评估,而不仅仅是数据可视化,因此拥有一个可移植且可扩展至具有数千行和数十个文本选项的表的解决方案将有所帮助。 我还没有尝试过其他两种方法,但会尝试一下。
谢谢!,
DS
回复:如何使用一列对另一列进行“值排序”两个都@jthi和@ron_horne提供很好的解决方案。但如果你只是想要一种交互式的方式来做到这一点,你所要做的就是
- 按您希望数据排序的列对数据表进行排序
- 进入要用于排序的列的值排序列属性,然后选择“行顺序级别”

现在,当您使用指定行顺序级别的列作为排序列时,它将使用该列的数据表中的顺序作为显示结果的顺序。
回复:如何使用一列对另一列进行“值排序”你好@SDF1
如果您需要的只是在图形生成器中使用它,您可以按另一个轴对任何轴进行排序,如图所示。您甚至可以更改排名的统计数据。如果您想要在其他分析或绘图平台中进行测试或使用的顺序,这对您没有帮助。

在大多数情况下,我所做的是通过其他变量生成表格摘要并对其进行排序。从那里我将类别直接复制粘贴到值排序中。 这是一个不是每个人都知道的技巧,但它确实有效。
罗恩
回复:如何使用一列对另一列进行“值排序”我不知道 GUI 是否可行,但您可以通过几个步骤编写脚本:
- 首先在列表中获得正确排序的文本列
- 将列属性添加到带有上一个列表的文本列
以下是一种可能的解决方案,至少应适用于当前示例(打开日志窗口以查看“调试”打印):
Names Default To Here(1);
dt = New Table("table",
Add Rows(10),
Compress File When Saved(1),
New Column("Text",
Character,
"Nominal",
Set Values({"A", "B", "C", "D", "E", "F", "AA", "BB", "CC", "DD"})
),
New Column("Level",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
)
);
//get values from Level and Text into Associative Array
aA_level_text = AssociativeArray(Column(dt, "Level") << Get Values,Column(dt, "Text") << Get Values);
show(aA_level_text); //debug
ordered_level = aA_level_text << Get Values; //Get values (will be ordered by Level)
Show(ordered_level); //debug
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
//Add Value Ordering Column Property to Text column
Eval(Eval Expr(
Column(dt, "Text") << Set Property("Value Ordering", Expr(ordered_level));
));
Show(Column(dt, "Text") << Get Property("Value Ordering")); //debug
dt << Clear Column Selection;