文字列からさまざまな長さの数値を抽出してさまざまな列に入れる「Duration」という名前の列があり、日数、時間、分、秒を表す値が含まれています。 最後の m は秒を表します。
したがって、一般的な形式は次のようになります: (0-365)d(0-24)h(0-60)m(0-60)m
ここではいくつかの例を示します。:
0日15時間47分43分
10日 10時間 21分 54分
0日04時間07分32分
268日 06時02分33分
計算を実行できるように、異なる列の日数、時間、分、秒を抽出する必要があります。
日数を抽出する式を試してみましたが、
Words( :Duration, "d" )[1]
2 番目の数値を抽出するには、次の式を使用しました。
Substr( Item( 2, :Duration ), 1, 2 );
同様に、Item 式の 3 と 4 を使用して 3 番目と 4 番目の数値を抽出します。
これらの文字列を数値に変換するために、さらに 4 つの列を作成し、コピーして貼り付け、データ型を数値に変更しました。
これは結果に到達するための遠回りな方法であることは理解しています。
誰かがより効率的な方法を手伝ってくれないかと思っていました。
高度な統計モデリング消費者および市場調査データアクセス実験計画法マスカスタマイゼーション品質およびプロセスエンジニアリング結果の共有と伝達Re: 文字列からさまざまな長さの数値を異なる列に抽出するログを教えてくれてありがとう。 そこで結果が表示されました。以前は、結果は別のウィンドウに表示されると考えていました。
Re: 文字列からさまざまな長さの数値を異なる列に抽出するマーク
結果は別ウィンドウに表示されると思っていました。 さて、ログを調べてみると、スクリプトを実行した回数と同じくらいの結果がそこに表示されていました。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する@txnelson正しい。 彼は、それを別のスクリプトとして使用する方法を示しました。 列の式に必要なのはこの式だけです。
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
Re: 文字列からさまざまな長さの数値を異なる列に抽出する@Mark_Baileyスクリプトはスタンドアロン JSL です。これをスクリプト ウィンドウに配置してスクリプトを実行することで実行します。これを実行したところ、うまく機能し、JMP ログに次の結果が記録されました。
day = 0;
day = 10;
day = 0;
day = 268;
Re: 文字列からさまざまな長さの数値を異なる列に抽出するマーク、
あなたのスクリプトをさまざまな方法で使用してみました
a) スクリプトエディタでスクリプトを使用して実行します。
b) 「cell」という名前の列を作成し、そこに項目のリストを入力します。 + 別の列「day」を作成し、その列の数式として「for ループ」を使用します。
などの方法があります。
エラーが発生します。
ヘルプを求めてスクリプト索引も調べてみました。
しかし、スクリプトを機能させることができません。私はスクリプト作成が初めてです。 助けていただけませんか。
Re: 文字列からさまざまな長さの数値を異なる列に抽出するこれまでのところ、いくつかの良い解決策が得られていますが、言葉()関数。
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"};
ここでは数式エディターに表示されています。 In Days()、In hours()、In Minutes() 関数数値を各単位の秒数に変換し、Duration 列を作成します。

ここにもデータ表を添付しました。
このトピックでは、私のお気に入りの 2 つの機能、Word() (または Words()) 関数と日付と時刻を組み合わせます。 それぞれについて説明した投稿は次のとおりです。
数式エディター関数を 1 つだけ学習する場合、Word() がその関数です。
JMP での日付、時刻、日時および期間の使用
Re: 文字列からさまざまな長さの数値を異なる列に抽出するPaul- 新しい関数を学びました。 ソリューションの詳細かつ簡略化されたバージョンをありがとうございます。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する完璧です。説明とスクリーンショットをありがとうございました。 recode を使用することで、他のインスタンスで時間を節約できました。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する[新しい値] ホットスポットの下の [再コード] - [数式列] を使用して、 [詳細] - [セグメントの抽出] を選択します。 日、時、秒の数式が保存された d、sec、および jmp ファイルを抽出したスクリーン ショットが添付されています。


Re: 文字列からさまざまな長さの数値を異なる列に抽出するこの例は、正規表現の使用方法を示しています。
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 );
);Re: 文字列からさまざまな長さの数値を異なる列に抽出する付属のサンプルテーブル。
Re: 文字列からさまざまな長さの数値を異なる列に抽出する正規表現を使用してみてはいかがでしょうか:
その日のために:
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" ) )
2 番目の場合:
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" ) )