如何识别与我的参考词有超过 2 个字符不同的词(使用列中的公式)?大家好,
我有一列由具有不同字符组合的单词组成(即 AAAAAAAAAA - 包含 10 个字符的单词)。 我想在相邻列中识别出具有超过 2 个字符不同的单词(即 A乙AAAA CE AA)。 字母不同的位置并不重要,此外,某些单词也可以比我的参考单词更短或更长。
因此,我想实现一个公式,使我能够区分/识别与我的参考序列有少于/多于 2 个不同字符差异且具有相同长度的单词。 我还是JMP的初学者,不知道这是否可以实现。 如果您有任何建议,请告诉我:)
高级统计建模消费者和市场研究实验设计回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?谢谢Jthi! 效果很好;)
回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?感谢您提供额外信息! 从脚本索引中查看最短编辑脚本:

有了它,你也许可以做一些事情,除非速度太慢。 Pat Match 也许也可以做到这一点,但我还没有研究如何正确使用它。
editList = Shortest Edit Script(:List of sequences, "FEBRUARY");
common = "";
For(i = 1, i <= N Items(editList), i++,
If(editList[i][1] == "Common",
common = common || editList[i][2]
)
);
Length(common) < Length(:List of sequences) - 2;

回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?嗨克雷格,
感谢您的帮助。 我有 1 到 5e6,只有一个参考词。 我基本上想过滤掉与参考词相比有超过 2 个字母不同的单词,因此我不需要超过是/否或 0/1 作为答案。 回顾一下你的问题:
test = "AEIOUA" // nDiff = 0 表示相同的字符串
test = "AAEIOU" // nDiff = 1 - 对于相同的字母,重新排序。
- 第一个A仅保留在同一位置。 (5 个不同字母)
test = "AEIOU" // 对于相同的字母,nDiff = 1,右侧缺少一个
test = "EIOUA" // 对于相同的字母,nDiff = 1,左侧缺少一个
测试 = "EIOU" // nDiff = 1
测试 = "AA" // dDiff = 1
测试 = "AXA" // dDiff = 1
- 长度与AEIOUA 不同。 为此,我应用了函数 Len 来过滤掉这些单词。
test = "AXXXXA" // dDiff = 1 用于匹配长度
- 第一个和最后一个 A 保持在相同位置。 (4个不同的字母)
测试=“AEI俄勒冈州A" // dDiff = 0 表示内部字母交换
与AEIOUA只有2个字母不同,因此可以通过标准。
test = "AEIOUEIOU" // 对于重复字母,nDiff = 1
长序列。 使用 Len 删除。
抱歉,我在解释我的问题时不清楚。 除了您的问题之外,我还重新创建了一个我正在寻找的示例。
| 参考序列 | 二月 |
| | |
| 序列列表 | 标签 - 与参考有超过 2 个字符不同? |
| 二月A尤里 | 不 |
| 世界航空协会鲁瑞 | 是的 |
| 亚拉乌尔贝夫 | 是的 |
| 二月右右右 | 不 |
| 二月瓦 | 不 |
| 是乙奥尔贝夫 | 是的 |
| 是乙尿素尿率阿里 | 是的 |
回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?我们需要更多的例子。 差异的数量是多少(不要过度指定,指出不重要的地方。)
ref = "AEIOUA" // 尝试理解重复字母的规则
test = "AEIOUA" // nDiff = 0 表示相同的字符串
测试 = "AAEIOU" // nDiff = ?对于相同的字母,重新排序
测试 = "AEIOU" // nDiff = ?对于相同的字母,右侧缺少一个
测试 = "EIOUA" // nDiff = ?对于相同的字母,左边缺少一个
测试 = "EIOU" // nDiff = ?
测试 = "AA" // dDiff = ?
测试 = "AXA" // dDiff = ?
测试 = "AXXXXA" // dDiff = ?用于匹配长度
测试 = "AEIUOA" // dDiff = ?对于交换的内部字母
测试 = "AEIOUEIOU" // nDiff = ?对于重复的字母
这些答案将有助于选择算法:
你说了〜1e6个测试词;您正在查看多少个参考词?
除了“是/否,存在超过 2 个差异”之外,您还需要其他答案吗? 差异计数有用吗?
回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?看来我误解了你的意思”我想在相邻列中识别出具有超过 2 个字符不同的单词”。 我的建议是标记源列中每个单元格包含一个字符串的行,该字符串本身由两个以上不同的字符组成(因此没有参考序列或字符串)。
回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?你好,Jthi,谢谢你的建议。
老实说,我仍在尝试理解这个公式:')。 在我正在处理的文件中,我只有一个参考词,并且必须使用每种可能的位置/字母组合来筛选超过一百万行条目。 我认为这个公式不起作用,因为我无法在公式中定义这些值。 考虑到大型数据库 Ive 是否可以对其进行调整?
回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?嗨伊恩,
感谢您的反馈。 我试图实现你写的公式,但我不知道在哪里可以定义我的参考序列是 AAAAAAA 而不是其他东西。 我将项目选择中的“”替换为“AAAAAAAA”,但结果不正确。 有什么建议我如何升级你写的公式吗?
回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?有很多方法可以做到这一点。 这是一个附加选项:
Names Default To Here(1);
/*
a = "ABAAAACEAA";
b = "AAAAAAAAAA";
Show(!IsMissing(Substitute(a, Left(a,1), "")));
Show(!IsMissing(Substitute(b, Left(b,1), "")));
*/
New Table("Untitled 2",
Add Rows(3),
New Column("Column 1", Character, "Nominal", Set Values({"ABAAAACEAA", "AAAAAAAAAA", "BBBBAAA"})),
New Column("Column 2",
Numeric,
"Continuous",
Format("Best", 12),
Formula(!Is Missing(Substitute(:Column 1, Left(:Column 1, 1), "")))
)
);
Column1 是包含字符的列
Formula(!Is Missing(Substitute(:Column 1, Left(:Column 1, 1), "")))
在这个简单的示例中,想法是替换从第一个位置找到的字符串中的所有值,如果仍然剩下一些字符,我们就知道字符串中有多于 1 个字符。 如果您有多个值需要替换,您应该能够通过修改 Substitute 函数参数来使用相同的想法
回复:如何识别与我的参考词有超过 2 个字符不同的单词(使用列中的公式)?请看一下所附的表格,它应该能让您有所了解。 它的核心是公式列(称为“决策”,并在表的列面板中用“+”号表示)。 单击“+”给出:

您需要一些 JSL 知识才能理解这一点,并且如果需要,可以使用“帮助 > 脚本索引”来准确了解它的工作原理。