JSL技巧:在列表中查找唯一值参加世界大战之一JMP探索峰会作为一名开发人员,他听到了来自许多不同应用领域的人们的问题和建议。 JMP 。一个JMP脚本语言(JSL)问题出现了3次,因此值得分享。问题是,“如何从列表中删除重复的项目?”
也就是说,给定列表{“喜欢”,“不喜欢”,“喜欢”,“中立”,“不喜欢”,“喜欢”}结果应该是{“不喜欢”,“喜欢”,“中立”} (顺序不重要)。
在JSL中,可能有很多合理的方法可以做到这一点(欢迎其他想法),但是我能想到的最简单的方法是使用关联数组。关联数组是键值对的集合,其中键是唯一的。如果您使用同一个键添加多个键值对,则仅保留其中之一(最后一个)。如果您不关心这些值,则关联数组实际上是一组唯一键。
在JSL中,您可以通过多种方式创建关联数组,但这里唯一感兴趣的方法是从列表中创建关联数组。生成的关联数组会将列表值视为键,并且仅存储唯一键。然后,我们可以向关联数组询问其键列表。
答案= { “喜欢” , “不喜欢” , “喜欢” , “中性的” , “不喜欢” , “喜欢” } ;
答案放=关联数组(答案) ;
独特答案=答案集<<取得金钥;
结果:{“不喜欢”,“喜欢”,“中立”}
如果尚未在JMP中发现关联数组,请浏览JSL脚本编制索引中的文档和示例。
现在,轮到您了:您还可以通过什么其他方式从列表中获取唯一值?我可以想到一个使用Summarize()函数的...
詹姆斯·库尔特拉(James Cultra)写道:这种方法对矩阵更有效。詹姆斯·库特拉(James Cultra)写道:
由于关联数组函数似乎可以对矩阵中的值进行四舍五入,因此该方法对矩阵更有效(因此,唯一列表与矩阵中的实际值不匹配)
Xan Gregg写道:如果您要通过一个关联的Ar ...an·格里格(Xan Gregg)写道:
如果您迭代一个关联数组(带有First和Next消息),则将按已排序键的顺序返回条目。如果值是唯一的,则可以将它们用作键,但如果不是,我认为将需要显式排序。您可以尝试JMP社区论坛对于后者的想法。
埃里克·维特里(Eric Wittry)写道:如果我有一个键=>值对,我会...埃里克·维特里(Eric Wittry)写道:
如果我有一个key => value对,并且我想对这些值进行排序并以该顺序返回键(*基于排序后的值),那么我将如何在JMP中做到这一点。谢谢埃里克
Leighton Spadone写道:// JSL Matrix函数用于重新...莱顿·斯潘东(Leighton Spadone)写道:
// JSL Matrix函数,用于将列表简化为唯一值;
//具有重复值的列表;
答案= {“喜欢”,“不喜欢”,“喜欢”,“中立”,“不喜欢”,“喜欢”};
//将设计矩阵折叠为单行,其中第一次出现为1,重复出现为0;
DesignMatrix = VMax(design(答案,答案));
//结果:DesignMatrix = [1 1 0 1 0 0];
//子集唯一值的答案列表;
UniqueAnswers = answers [Loc(DesignMatrix)];
//结果:UniqueAnsers = {“不喜欢”,“喜欢”,“中立”};
Pmroz写道:在列表中查找唯一值是在...姆罗兹写道:
在列表中查找唯一值
不久前在JMP论坛上。Â这是功能
我使用的是基于Xan展示的技术的:
/ *
函数名称:get_unique_values
说明:在列表中查找唯一值。
使用关联数组
参数:
in_list列表以获取唯一的值
* /
Get_unique_values =函数( { in_list } , {默认本地} ,
Âtmp = [ => 0 ] ;
插入( tmp,in_list ) ;
tmp <<获取密钥;
) ;
Guillaume写道:另一种方法是使用循环语句和...纪尧姆写道:
另一种方法是使用循环语句和Loc()函数查找唯一值
答案= {“喜欢”,“不喜欢”,“喜欢”,“中立”,“不喜欢”,“喜欢”};
unique_answers = List();
对于(i = 1,i <= Nitems(answers),i ++,
如果(Nrows(Loc(unique_answers,answers [i])))== 0,
InsertInto(unique_answers,answers [i])
);
);
迈克尔·克罗蒂(Michael Crotty)写道:另一个内置的JSL函数可以...迈克尔·克罗蒂(Michael Crotty)写道:
另一个可以帮助解决此问题的内置JSL函数是Design()函数:
答案= {“喜欢”,“不喜欢”,“喜欢”,“中立”,“不喜欢”,“喜欢”};
设计(答案,<<级)[2]