<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一个我有兴趣在我的数据集中识别的特定值列表(:MeasurementGroup 列的特定值)。我创建了一个名为“感兴趣的价值?”的新专栏。使用公式生成指标:是或否
dt1 << New Column("感兴趣的价值?",
特点,
标称,
公式(如果(
:MeasurementGroup == "A", "YES",
:MeasurementGroup == "B", "YES",
:MeasurementGroup == "C", "YES",
:MeasurementGroup == "D", "YES",
:MeasurementGroup == "E", "YES",
:MeasurementGroup == "F", "YES",
:MeasurementGroup == "G", "YES",
:MeasurementGroup == "AA", "YES",
:MeasurementGroup == "BB", "YES",
:MeasurementGroup == "CC", "YES",
:MeasurementGroup == "ZZ", "是",
:MeasurementGroup == "ABC", "YES",
:MeasurementGroup == "DEC", "YES",
:MeasurementGroup == "WSA", "YES",
:MeasurementGroup == "RSS", "是",
:MeasurementGroup == "DVC", "是",
:MeasurementGroup == "SFS", "YES",
:MeasurementGroup == "AAZ", "YES",
:MeasurementGroup == "ZZA", "YES",
:MeasurementGroup == "TTT", "YES",
“不”) )
);
我的数据表有近 100 万行......而且在填充之前它似乎搅拌了一段时间。有没有更有效的方法来实现同样的结果?
任何帮助是极大的赞赏!谢谢
看起来不错,布雷迪!
顺便说一句,当我发布代码时,我将 JSL 复制/粘贴到 word 文档中,然后从那里复制/粘贴到论坛。这保留了 JSL 编辑器的外观。
例如:
dt <<新列( “是/否 2” ,
公式(
包含( { “一个” , “乙” , “C” , “D” , “E” , “F” , “G” , “AA” , “BB” , “抄送” , “Z Z” , “美国广播公司” , “十二月” , “WSA” ,
“RSS” , “DVC” , “SFS” , “阿兹” , “ZZA” , “TTT” } , :测量组
) != 0
) ,
) ;
嗨 JMP 初学者,
**** 请参阅附加的 .jsl 文件以按预期查看这些脚本。 我一直无法正确显示我的帖子,如果您复制/粘贴或输入下面出现的脚本,我不确定它们是否会起作用。 当我发布它们时它们看起来不正确,但在我编辑时它们看起来还不错,所以除了附加脚本文件之外我不确定该怎么做。 我很抱歉!
*****
如果您愿意使用值标签(对于大型表,这也可以节省大量磁盘空间),您还有另外几个快速选择:
1) 使用 Contains() 函数的基于公式的方法:
dt << 新列(“y/n 2”,
公式(
包含(
{“A”、“B”、“C”、“D”、“E”、“F”、“G”、“AA”、“BB”、“CC”、“ZZ”、“ABC”、“ DEC”、“WSA”、“RSS”、“DVC”、“SFS”、“AAZ”、“ZZA”、“TTT”}、
:测量组
) != 0
),
<<添加列属性(值标签({0, 1}, {"NO", "YES"}))
);
2) 非基于公式的方法:JMP 可以非常快速地处理表格;考虑到必须创建和关闭一个全新的表,这种方法的速度让我有点震惊:
dt = 当前数据表();
dt2 = 新表(“mt”,不可见);
列(dt2,1)<<数据类型(字符)<<设置名称(“测量组”)<<设置值(
{“A”、“B”、“C”、“D”、“E”、“F”、“G”、“AA”、“BB”、“CC”、“ZZ”、“ABC”、“ DEC”、“WSA”、“RSS”、“DVC”、“SFS”、“AAZ”、“ZZA”、“TTT”}
);
dt2 << 新列(“y/n”,<<设置每个值(1));
dt << 新列(“y/n”,<<设置每个值(0));
dt << 更新(使用(dt2),匹配列(:测量组=:测量组),从更新表中添加列(无));
列(dt,“y/n”)<<添加列属性(值标签({0, 1},{“NO”,“YES”}));
关闭(dt2,nosave);
在 100 万行表上,Match 函数的运行时间约为 2.4 秒。 (MS 的电脑似乎比我的快;)
上述方法 1 的运行时间约为 0.8 秒,而方法 2 的运行时间约为 0.4 秒。
干杯,
布雷迪
吉姆,感谢您的快速回复! 我能够实现 LOC 功能并立即看到速度的提高!
MS,感谢您进一步改进并教我 MATCH 功能(并提供速度比较)!
匹配功能对多选有效。 我做了一个快速测试:有一百万行匹配, Loc和如果分别在 2.1 秒、6.9 秒和 10.2 秒内完成。
dt <<新列( “利益价值” ,
特点,
标称,
公式(
匹配( :测量组,
“一个” , “是的” ,
“乙” , “是的” ,
“C” , “是的” ,
“D” , “是的” ,
“E” , “是的” ,
“F” , “是的” ,
“G” , “是的” ,
“AA” , “是的” ,
“BB” , “是的” ,
“抄送” , “是的” ,
“Z Z” , “是的” ,
“美国广播公司” , “是的” ,
“十二月” , “是的” ,
“WSA” , “是的” ,
“RSS” , “是的” ,
“DVC” , “是的” ,
“SFS” , “是的” ,
“阿兹” , “是的” ,
“ZZA” , “是的” ,
“TTT” , “是的” ,
“不”
)
)
) ;
我会尝试使用 LOC() 函数
if(N 行(Loc({"A","B","C",................},MeasurementGroup))>0,"Yes","NO" )