優化 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” , “是的” ,
“B” , “是的” ,
“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,"是","否" )