將字符串中不同長度的數字提取到不同的列中我有一個名為“持續時間”的列,其中的值表示天數、小時數、分鐘數和秒數。 最後的 m 表示秒。
所以典型的格式是:(0-365)d(0-24)h(0-60)m(0-60)m
這裡有些例子。:
0天 15小時 47m 43m
10天10小時21m 54m
0天04小時07米32米
268d 06h 02m 33m
我需要提取不同列中的天數、小時數、分鐘數和秒數,以便我可以對其進行計算。
我嘗試了提取天數的公式,
Words( :Duration, "d" )[1]
為了提取第二個數字 - 我使用了公式:
Substr( Item( 2, :Duration ), 1, 2 );
以同樣的方式使用 Item 公式中的 3 和 4 提取第三個和第四個數字。
為了將這些字符串轉換為數字,我又創建了 4 列;複製並粘貼並將數據類型更改為數字。
我知道這是一種迂迴的方式來達到結果。
我想知道是否有人可以幫助我以更有效的方式。
高級統計建模消費者和市場研究數據存取實驗設計大規模定制質量和工藝工程分享和交流結果回复:將字符串中不同長度的數字提取到不同的列中非常感謝您向我指出日誌。 我在那裡看到了結果。以前我以為結果會顯示在單獨的窗口中。
回复:將字符串中不同長度的數字提取到不同的列中標記
我的印像是結果將顯示在單獨的窗口中。 現在,我查看了日誌 - 我在那裡看到了結果 - 與我運行腳本的次數一樣。
回复:將字符串中不同長度的數字提取到不同的列中@tx尼爾森是正確的。 他向您展示瞭如何將其用作單獨的腳本。 此表達式是列公式所需的全部內容:
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
回复:將字符串中不同長度的數字提取到不同的列中@馬克貝利腳本是一個獨立的 JSL。您可以通過將其放入腳本窗口並運行腳本來運行它。我這樣做了,效果很好,在 JMP 日誌中給出了以下結果
day = 0;
day = 10;
day = 0;
day = 268;
回复:將字符串中不同長度的數字提取到不同的列中標記,
我嘗試以多種不同的方式使用你的腳本
a) 通過在腳本編輯器中使用腳本並運行它,
b)創建一個名為“cell”的列並在其中輸入項目列表+創建另一列“day”並使用“for循環”作為該列中的公式,
和其他方式。
我收到一個錯誤。
我也嘗試在腳本索引中查找幫助。
但我無法讓腳本工作。我是腳本編寫新手。 你能幫忙嗎?
回复:將字符串中不同長度的數字提取到不同的列中到目前為止,您已經得到了一些很好的解決方案,但我想指出的是,您非常接近使用字()功能。
您可以在 Words() 函數的最後一個參數中指定多個分隔符,以便您可以執行以下操作:
vals={"0d 15h 47m 43m", "10d 10h 21m 54m","0d 04h 07m 32m", "268d 06h 02m 33m"};
for (i=1, i<=nitems(vals), i++,
show(words(vals[i], "dhm ")) //use "d" "h" "m" and a space as delimiters
);
在日誌中:
/*:
Words(vals[i], "dhm ") = {"0", "15", "47", "43"};
Words(vals[i], "dhm ") = {"10", "10", "21", "54"};
Words(vals[i], "dhm ") = {"0", "04", "07", "32"};
Words(vals[i], "dhm ") = {"268", "06", "02", "33"};
它位於公式編輯器中,以及以天()、以小時()、以分鐘()為單位函數將數值轉換為每個單位的秒數,以創建“持續時間”列。

我也在這裡附上了數據表。
本主題結合了我最喜歡的兩個功能:Word()(或 Words())函數以及日期和時間。 以下是我寫的帖子,對它們進行了解釋:
如果您只學習一種公式編輯器函數,Word() 就是其中之一
在 JMP 中使用日期、時間、日期時間和持續時間
回复:將字符串中不同長度的數字提取到不同的列中保羅-我學到了一個新功能。 非常感謝您提供詳細且簡化的解決方案版本。!
回复:將字符串中不同長度的數字提取到不同的列中完美。非常感謝您的描述和屏幕截圖。 在其他情況下,使用重新編碼節省了我的時間。
回复:將字符串中不同長度的數字提取到不同的列中使用重新編碼 - 公式列 - 在新值熱點下選擇高級 - 提取段。 提取 d、sec 和 jmp 文件的屏幕截圖,並附有保存的日、小時、秒公式。


回复:將字符串中不同長度的數字提取到不同的列中此示例說明瞭如何使用正則表達式。
Names Default To Here( 1 );
cell = {"0d 15h 47m 43m", "10d 10h 21m 54m", "0d 04h 07m 32m", "268d 06h 02m 33m"};
For( i = 1, i <= N Items( cell ), i++,
day = Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) );
Show( day );
);回复:將字符串中不同長度的數字提取到不同的列中附樣本表。
回复:將字符串中不同長度的數字提取到不同的列中使用正則表達式怎麼樣:
當日:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\1" ) )
一小時:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\2" ) )
就分鐘而言:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\3" ) )
對於第二個:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\4" ) )
儘管您實際上不需要捕獲其他數字,但每個數字都位於一個捕獲組中。 你可以用這些來簡化它:
Num( Regex( :Duration, "(\d+)d\s\d+h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s(\d+)h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s(\d+)m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s\d+m\s(\d+)m", "\1" ) )