將數組轉換為字符串大家好,
我試圖從另一個表的數組中獲取一個值,並將其用作我的選擇值。 有沒有辦法將數組轉換為字符串?
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);