优化 IF 语句?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一个我有兴趣在数据集中识别的特定值列表(:MeasurementGroup 列的特定值)。我创建了一个名为“兴趣价值?”的新专栏。使用公式生成指标:是或否
dt1 << 新列( "感兴趣的价值?",
特点,
标称,
公式( 如果(
: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", "YES",
:MeasurementGroup == "ABC", "YES",
:MeasurementGroup == "DEC", "YES",
:MeasurementGroup == "WSA", "YES",
:测量组==“RSS”,“是”,
:MeasurementGroup == "DVC", "YES",
:MeasurementGroup == "SFS", "YES",
:MeasurementGroup == "AAZ", "YES",
:MeasurementGroup == "ZZA", "YES",
:测量组==“TTT”,“是”,
“不”) )
);
我的数据表有接近 100 万行...并且在填充之前似乎会发生一些变化。有没有更有效的方法来达到同样的结果?
任何帮助是极大的赞赏!谢谢
回复:优化 IF 语句?谢谢彼得,从现在开始我发帖时会使用这个技巧。
干杯,
布雷迪
回复:优化 IF 语句?看起来不错,布雷迪!
顺便说一句,当我发布代码时,我将 JSL 复制/粘贴到 Word 文档中,然后从那里复制/粘贴到论坛。这保留了 JSL 编辑器的外观。
例如:
dt <<新专栏( “是/否2” ,
公式(
包含( { “A” , “B” , “C” , “D” , “E” , “F” , “G” , “AA” , “BB” , “抄送” , “Z Z” , “ABC” , “十二月” , “WSA” ,
“RSS” , “DVC” , “SFS” , “阿兹” , “ZZA” , “TT” } , :测量组
) != 0
) ,
) ;
回复:优化 IF 语句?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
),
<<添加列属性( value labels( {0, 1}, {"NO", "YES"} ) )
);
2) 非基于公式的方法:JMP 可以非常快速地处理表格;鉴于必须创建并关闭一个全新的表,这种方法的速度让我有点震惊:
dt = 当前数据表();
dt2 = 新表(“mt”,不可见);
列( dt2, 1 ) << 数据类型( 字符 ) << 设置名称( "MeasurementGroup" ) << 设置值(
{“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 << Update( With( dt2 ), 匹配列( :Measurement Group = :MeasurementGroup ), 从更新表添加列( None ) );
Column( dt, "y/n" ) << 添加列属性( value labels( {0, 1}, {"NO", "YES"} ) );
关闭( dt2, nosave );
在一百万行表上,Match 函数的运行时间约为 2.4 秒。 (MS的电脑似乎比我的快;)
上述方法 1 的运行时间约为 0.8 秒,而方法 2 的运行时间约为 0.4 秒。
干杯,
布雷迪
回复:优化 IF 语句?吉姆,感谢您的快速回复! 我能够实现 LOC 功能,并看到速度立即得到改善!
MS,感谢您进一步改进并教我 MATCH 功能(并提供速度比较)!
回复:优化 IF 语句?给这个人颁奖吧!这很棒。
回复:优化 IF 语句?匹配功能对于多项选择非常有效。 我做了一个快速测试:有一百万行匹配,洛克和如果分别在 2.1 秒、6.9 秒和 10.2 秒内完成。
dt <<新专栏( 《兴趣价值》 ,
特点,
标称,
公式(
匹配( :测量组,
“A” , “是的” ,
“乙” , “是的” ,
“C” , “是的” ,
“D” , “是的” ,
“E” , “是的” ,
“F” , “是的” ,
“G” , “是的” ,
“AA” , “是的” ,
“BB” , “是的” ,
“抄送” , “是的” ,
“Z Z” , “是的” ,
“ABC” , “是的” ,
“十二月” , “是的” ,
“WSA” , “是的” ,
“RSS” , “是的” ,
“DVC” , “是的” ,
“SFS” , “是的” ,
“阿兹” , “是的” ,
“ZZA” , “是的” ,
“TT” , “是的” ,
“不”
)
)
) ;
回复:优化 IF 语句?我会尝试使用 LOC() 函数
if(N 行(Loc({"A","B","C",.........................},MeasurementGroup))>0,"是","否" )