将数组转换为字符串大家好,
我试图从另一个表的数组中获取一个值,并将其用作我的选择值。 有没有办法将数组转换为字符串?
name_key = associative array(column(ref_file_1, "NAME") << get values) << get keys;
merged_file << select where(:Name_final==name_key);
高级统计建模大规模定制回复:将数组转换为字符串克雷格,
我再次了解了有关 JMP 的新知识。我最初使用 Contains() 函数编写代码,但后来转换为使用 Loc() 函数,因为我认为这是一个问题
Contains( "BARBARA ANN", "BARBARA")
返回 True。
我(事实证明是错误的)如果 Contains 的比较组件是 JMP 项目列表,
Contains( {"BARBARA ANN", "BETTY", "DAVID"}, "BARBARA")
也会返回 True,但是,它返回 False,这意味着它进行绝对匹配。
感谢您提供的宝贵信息
回复:将数组转换为字符串再次对吉姆触及问题核心的能力感到惊讶。 这里有两段不错的代码值得更长的解释:
这是做什么的?
name_key = associative array(column(ref_file_1, "NAME") << get values) << get keys;
参考文件_1是数据表参考, “姓名”是字符串形式的列名称(字面意思是“NAME”,但可以在变量中),并且柱子函数返回列引用。 这<<获取值message 获取列中的所有值,包括重复值。 这关联数组函数创建一组唯一值,并且<<获取密钥消息返回唯一值。 (做得很好@29755 .)
和这个?
merged_file << select where(nrows(loc(name_key,:Name_final))>0);
这<<选择地点消息对每一行进行操作合并文件,一次一个,并在参数非零时选择行。
这洛克()函数返回索引矩阵。 它搜索列表中名称键对于 :Name_final 的出现。 生成的矩阵可以有零行或更多行,但在本例中它将有 0 或 1 行,因为键是唯一的。 这nrows()函数返回 0 或 1,然后比较 >0 并保持 0 或 1。 因此,如果 :Name_final 位于 ref_file_1:NAME 列表中,则选择行。
选择:
如果 name_key 中有 >1e6 个名称,merge_file 中有 >1e7 行怎么办? 表演会是什么样子? loc 函数将进行大量搜索。 它将比较 1e13 个字符串。 你会厌倦等待。 解决这个问题的方法是使用关联数组,如下所示:
nameSet = associative array(column(ref_file_1, "NAME") << get values);
merged_file << select where(contains(nameSet, :Name_final));
现在 nameSet 中只有 1e7 次查找。 它们不是免费的,但比顺序检查 1e6 个项目要快得多。 我猜每个比较大约 20 次 (log2(1e6))。 这对于下一个维护者来说也可能更容易遵循。
(未经测试。 欢迎指正!)
回复:将数组转换为字符串我想这会给你你想要的
name_key = associative array(column(ref_file_1, "NAME") << get values) << get keys;
merged_file << select where(nrows(loc(name_key,:Name_final))>0);