根據正則表達式選擇堆疊列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我不斷堆疊數百列,這些列具有共同的前綴並以不同的數字或後綴結尾。
我想做的是編寫一個腳本來:
- 根據正則表達式模式查找列,例如“BLUE_CARS_*_\d{1,2}”、“HOMES_(SINGLE|DOUBLE)_WIDE”等。
- 選擇那些列
- 堆疊列(並放置在新的數據表中)
對於我的生活,我無法找到(或 Google 正確搜索)如何將正則表達式用於列選擇。
我考慮過按數據類型選擇列,但存在共享該數據類型的其他列,而不是
提到我想要更靈活的東西。
任何建議或代碼片段將不勝感激,並在此先感謝您。
回复:基於正則表達式選擇的堆棧列show() 和有關發生的事情的詳細信息幫助我看到我們實際上是在告訴它使用列名,而不是實際的列——我認為這是有道理的,因為 nc = dt << get column names;< /code> 首先被使用。 所以,而不是
<代碼>cname = nc <<獲取名字;
我們需要
<代碼>cname = column(nc ) << 獲取名稱;
我想默認情況下 get column names() 返回字符串,而不是列列表。 啊,好吧,它現在按預期工作。
感謝您的幫助!
回复:基於正則表達式選擇的堆棧列顯示(我,數控);
將顯示兩個變量的當前值。在循環中的“i++”增量之後將其插入。nc *應該* 顯示為列名列表(在花括號中)。在這種情況下,<
使用 show 命令運行它後檢查日誌,看看有什麼問題。
JMP 中的腳本化對像是理解消息的對象。變量可以包含矩陣、列表或數字,它們不是可編寫腳本的對象,或者變量可以包含顯示框、數據表或列,它們是可編寫腳本的對象。還有很多其他類型,有些可以編寫腳本,有些則不能。
我的猜測是加載項未明確選擇數據表,錯誤從那裡級聯。在這個之前你可能需要另一個 show() 。
克雷奇
回复:基於正則表達式選擇的堆棧列我在將此代碼轉換為 JMP 插件(帶有按鈕)時遇到問題。 當我從腳本編輯器運行代碼時,代碼運行良好,但當我嘗試將其作為加載項運行時,它會出現以下問題:
Send Expects Scriptable Object in access or evaluation of 'Send' , nc<I> << /*###*/獲取名字/*###*/</I>
For( i = 1, i <= N Items( nc ), i++, cname = nc<I> << /*###*/get name/*###*/; model = nc<I> << get modeling type;</I></I>
如果我將第一行改為閱讀, cname = dt << 獲取名稱(nc<I> );</I>它繼續抱怨下一行。
然後我將這一行改為閱讀, model = dt << 獲取建模類型(nc<I> );</I>然後它向下移動到 sort() 函數,更改錯誤:
<CODE> Send Expects Scriptable Object in access or evaluation of 'Send' , 轉置 <<SPAN style="font-family: arial, helvetica, sans-serif;">代碼讀取</SPAN>
transposed = transposed << /*###*/ sort(replace table, by("Row 1"), order(Descending))/*###*/;<BR /><SPAN style="font-family: arial, helvetica, sans-serif;">關於如何解決這個問題以及使其可移植(在編輯器和插件中都可以毫無問題地工作)的任何想法? 對於這看起來多麼不清楚,我深表歉意。</SPAN>
(哇,為什麼沒有消息預覽按鈕...)。
回复:基於正則表達式選擇的堆棧列是的,我在 JSL 中留下了一些顯示函數,因為它們是有用的調試輔助工具。完成後將它們取出,這樣日誌就不會被舊問題的舊答案弄得亂七八糟。
克雷格
回复:基於正則表達式選擇的堆棧列歡迎,謝謝。盡可能使用顯式數據表:
dtstacked = dt << 堆棧(
列(圖標),
源標籤列(“標籤”),
堆疊數據列(“數據”)
);
dtstacked 將引用從 dt<回复:基於正則表達式選擇的堆棧列
偉大的! 這正是我所需要的。
我仍然熟悉 jsl 語法和“顯示”所有內容的需要。
對於 Regex() 函數,我找不到任何關於在常規列函數之外使用它的文檔,所以這很方便,它的工作方式相同。 這將在很多方面證明是有用的。
相關的,我如何確保我選擇了新表/窗口以用於腳本的其餘部分?
另外,我肯定不得不關閉翻譯,因為它弄亂了代碼。
謝謝你!
回复:基於正則表達式選擇的堆棧列您可能必須關閉屏幕頂部的翻譯複選框才能正確查看 JSL。
回复:基於正則表達式選擇的堆棧列像這樣的東西。
dt = Open( "$sample_data/big class.jmp" );
allCols = dt << getcolumnnames;
顯示(所有列); // 這些是名字,不是字符串
acols = {}; // 名稱中帶有“a”的列
圖標 = {}; // 名稱中帶有“i”的列
n = N 項( allCols );
對於 ( k = 1, k <= n, k++,
cname = allCols << 獲取名稱; // 這些是字符串,適合正則表達式
顯示(用戶名);
If( !Is Missing( Regex( cname, "a" ) ),
插入(acols,allCols) // 保留名稱
);
If( !Is Missing( Regex( cname, "i" ) ),
插入(圖標,allCols) // 保留名稱
);
);
顯示(acols,icols); // {:name, :age} 和 {:height, :weight}
dt << 棧(
列(圖標),
源標籤列(“標籤”),
堆疊數據列(“數據”)
);
