我正在使用 JMP17.0.0 中的排序功能,但得到了意外的结果。我希望排序的列包含序列号列表,其中每个序列号都是字母和数字字符的混合(示例:G95VXWW8CID5、G921J8D2CIE3、G943H085CIB2)。排序 -> 升序操作将 G95... 置于 G92... 之前,而 G92... 则置于 G94 之前...这是出乎意料的,因为虽然所有三个序列号中的前两个字符都是相同的,但 G9 在第三个位置,2 应该在 4 之前,而 4 应该在 5 之前。JMP 对字母数字值进行排序的规则是什么?这些规则是否可以编辑?
这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。
这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。
你好@EdHutchins99 ,
欢迎来到社区!
我尝试用您提到的三个 ID 重现您的问题。
我认为 JMP 的行为是正常且符合预期的,因为它会尝试使用遇到的第一个字母数字字符进行排序。
由于第一个字符全部为 G(无法根据字母表排序),因此 JMP 将对紧随其后的数字进行排序。 因此,当尝试排序时,由于您没有相同数量的数字字符且 95 < 921 < 943,JMP 将显示此 G95..., G92... 和 G94... 顺序。
如果您通过重新编码 ID 列以仅保留前三个字母数字字符来创建新列,然后对此新列进行排序,您应该会得到您期望的结果。
如果您的原始列名为 ID,则这是您可以在新列中使用的公式脚本(否则您必须按此公式中的列名称更改 ID):
Recode( :ID, {Word( [1 3], _rcNow, "", Unmatched( _rcNow ) )} )
希望对你有帮助,
这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。
我不确定在不使用列属性的情况下是否可以影响排序的方式。 您可以创建“支持”列,然后可以对其进行排序以获得所需的顺序,或者您可以使用查询生成器
或使用值顺序列属性
使用函数进行排序时存在一些差异:
Names Default To Here(1); dt = New Table("Untitled", Add Rows(3), New Column("Column 1", Character, "Nominal", Set Values({"G95VXWW8CID5", "G921J8D2CIE3", "G943H085CIB2"}) ) ); a = dt[0, 1]; show(a); b = Associative Array(Column(dt, 1)); Show(Sort List(a)); Show(b << get keys); Show(Ranking(a)); dt << Sort(By(:Column 1), Replace Table, Order(Ascending)); Show(dt[0, 1]); Write();
a = {"G95VXWW8CID5", "G921J8D2CIE3", "G943H085CIB2"};
Sort List(a) = {"G921J8D2CIE3", "G943H085CIB2", "G95VXWW8CID5"};
b << get keys = {"G921J8D2CIE3", "G943H085CIB2", "G95VXWW8CID5"};
Ranking(a) = [3, 1, 2];
dt[0,1] = {"G95VXWW8CID5", "G921J8D2CIE3", "G943H085CIB2"};
JMP表排序似乎正在使用自然排序(维基百科)喜欢@Victor_G提到的而不是按字母顺序排序
这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。