你好,
我有一张像这样的桌子
| ID | 第2栏 |
| ABC001235G | |
| ABC001234 | |
| ABC001235 | |
| ABC001234D | |
| ABC001234F | |
我想重新编码 ID 列,以便我的所有值(例如“ABC001234D”和“ABC001234F”)变成“ABC001234” - 基本上我想删除语句中的最后一个字母。 但是,我无法通过手动过程来做到这一点。 有太多行要做,我不可能为脚本中可能使用的每个 ID 手动编写它。 寻找一种通过脚本来做到这一点的方法。 谢谢!
为此,我会使用正则表达式。 我曾经喜欢这样至少在某种程度上使用正则表达式:正则酮还查看JMP 字符函数 - 正则表达式和来自脚本索引的正则表达式。
下面是一个示例,其中提供了两种使用 JMP 中的正则表达式删除结束字符的可能方法(可以轻松修改它们以支持非大写字母):
Names Default To Here(1);
dt = New Table("Untitled 3",
Add Rows(5),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values(
{"ABC001235G", "ABC001234", "ABC001235", "ABC001234D", "ABC001234F"}
)
)
);
dt << New Column("Regex1", Character, Nominal, Formula(Regex(:ID, "^[A-Z]+(\d+)")));
dt << New Column("Regex2", Character, Nominal, Formula(Regex(:ID, "[A-Z]*$", "", GLOBALREPLACE);));
根据用例选择一个(可以使用示例代码轻松测试它们如何处理不同的字符串):
第一个将匹配字符串开头的 1 个或多个大写字符,后跟任意数量的数字(因此它将忽略数字后面的任何内容)。
第二个将匹配字符串末尾的零个或多个大写字符,并将它们替换为空字符串。
您可以使用以下公式来完成此操作:
val = Reverse( :ID );
While( Is Missing( Num( Substr( val, 1, 1 ) ) ),
val = Substr( val, 2 )
);
Reverse( val );
这将删除所有尾随的非数字值
嗨,萨尼尔!
下面的公式可能会对您有所帮助,但您必须对 ID 变量的命名约定和准确性做出一些假设。
如果您的 ID 值始终以 3 个字符开头,您可以创建一个新列并使用以下公式:
Substr(:ID, 1, 3) ||正则表达式(:ID, "\d+")
此公式将允许数值长度不一致。对于 ID 值开头字符数不一致的情况,调整公式也不是太难。但是,如果有人将 ID 错误地输入为 0(数字)而不是 O(字母),或者任何其他某些印刷错误,您可能会得到意想不到的结果。
祝你好运,
凯文