取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
See how to use JMP Live to centralize and share reports within groups. Webinar with Q&A April 4, 2pm ET.
选择语言 隐藏翻译栏
查看原发布的话题

JMP17 中的字母数字排序规则

EdHutchins99
Level I

我正在使用 JMP17.0.0 中的排序功能,但得到了意外的结果。我希望排序的列包含序列号列表,其中每个序列号都是字母和数字字符的混合(示例:G95VXWW8CID5、G921J8D2CIE3、G943H085CIB2)。排序 -> 升序操作将 G95... 置于 G92... 之前,而 G92... 则置于 G94 之前...这是出乎意料的,因为虽然所有三个序列号中的前两个字符都是相同的,但 G9 在第三个位置,2 应该在 4 之前,而 4 应该在 5 之前。JMP 对字母数字值进行排序的规则是什么?这些规则是否可以编辑?

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

1 个已接受解答

已接受的解答

回复:JMP17 中的字母数字排序规则

此外,如果您向列添加“值顺序”属性,JMP 应立即识别出您的数据是字母数字,并询问您是否要使用简单排序对其进行配置。 如果您回答“是”,则在以下对话框中单击“确定”(即,不要调整任何内容,只需接受),然后排序将按您的预期进行。

undefined

undefined

undefined

 

 

8 条回复8
txnelson
Super User

回复:JMP17 中的字母数字排序规则

是否为您要排序的列设置了“值顺序”列属性?值中是否有不可打印的字符(包括空格)?

如果您可以提供示例数据表,那将非常有帮助。

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

Victor_G
Super User

回复:JMP17 中的字母数字排序规则

你好@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)。

jthi
Super User

回复:JMP17 中的字母数字排序规则

我不确定在不使用列属性的情况下是否可以影响排序的方式。 您可以创建“支持”列,然后可以对其进行排序以获得所需的顺序,或者您可以使用查询生成器

undefined

undefined

或使用值顺序列属性

undefined

使用函数进行排序时存在一些差异:

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)。

回复:JMP17 中的字母数字排序规则

此外,如果您向列添加“值顺序”属性,JMP 应立即识别出您的数据是字母数字,并询问您是否要使用简单排序对其进行配置。 如果您回答“是”,则在以下对话框中单击“确定”(即,不要调整任何内容,只需接受),然后排序将按您的预期进行。

undefined

undefined

undefined

 

 

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

EdHutchins99
Level I

回复:JMP17 中的字母数字排序规则

感谢大家!设置“值顺序”属性,然后排序,将值按照我预期的顺序放置。  

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

andersonmj2
Level IV

回复:JMP17 中的字母数字排序规则

同意@Victor_G @jthi关于反映自然排序顺序的排序规则...您可以看到 Excel 和 JMP 对这些进行不同的排序。 但我觉得我们花了很长时间试图处理 Excel,却没有理解下面的示例中 11 大于 2,以至于我们忘记了这是不正常的。 就您而言,您有 943、921 和 95。潜在的问题是您的编码系统是否希望 95 是最高的? 那么我同意@Victor_G关于利用辅助列。

 

按字母顺序排序:

  1. z11
  2. z2

自然排序:

  1. z2
  2. z11

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

pcarroll1
Level IV

回复:JMP17 中的字母数字排序规则

我不得不恭敬地不同意 JMP 的排序选择。据我所知,没有其他软件可以这样做,而且它一点也不明显。

如果数据类型指定为字符,则应将其视为字符并按可接受的规则排序。 也许 JMP 需要一个新的类别 Char/Num。

我下面的数据集按 JMP 排序为

0CNFB
0ERRB
01JAB
013BB
2X0UB
11DBB
13ZYB
17TSB
156QB
1474B

我理解此处解释的规则,但谁会认为这些应该如何排序?这不是对字符字段进行排序的方法。

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。

txnelson
Super User

回复:JMP17 中的字母数字排序规则

您的首选项设置为数字排序。  

文件=>首选项=>表格

并取消选中数字排序的复选框

undefined

 

这篇帖子最初是用 English (US) 书写的,已做计算机翻译处理。当您回复时,文字也会被翻译成 English (US)。