文字列から必要な要素をすべて抽出して多重応答分析を可能にしますこんにちは! SharePoint からのデータがあり、問題を解決するためにどのようなツール/技術が使用されたかを追跡するために使用します。 ところで、これには JMP も含まれます。データ (1 列) は、次のタイプの ; 区切り形式に従います。
<技術の説明>;#<技術 ID>;<技術の説明>;#<技術 ID>;<技術の説明>;#<技術 ID>...
3.4 オフライン最適化およびシミュレーション ツール;#15;#3.9 シミュレーション;#30;#4.6 マテリアル バランス;#22
テーブル (解決された問題) の各行には 1 つ以上の を含めることができます。 は # で始まる場合もあれば、そうでない場合もあります。 ただし、 の前には常に # が付きます。
の文字列と複数応答分析の形式を解析したいと思います: 15、30、22 (上記の例)。
- は最大 100 個あるため、最大 100 個のスパース列を作成するのは無駄に思えます。サンプル データ ファイル Failures3Delimited.jmp で使用されているアプローチは、この問題に対処する最も効率的な方法ですか?
- REGEX を学習し始めて、 の出現を 1 つ見つけることができましたが、すべてではありませんでした。 ループは必要ですか? これを行う別の方法はありますか?
ありがとう。 JMP17.1 Proを使用します。
自動化とスクリプト作成データのブレンディングとクリーンアップRe: 文字列から必要な要素をすべて抽出して多重応答分析を有効にする私が思いついた潜在的な解決策は次のとおりです。

これが私が使用した式です
i = 1;
string = "";
While( Word( i, :Input, "#;" ) != "",
theWord = Word( i, :Input, "#;" );
If( Is Missing( Num( theWord ) ) == 0,
string = string || "," || theWord
);
i++;
);
Try( Substr( string, 2 ) );
Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にする非常にエレガントです - 複雑な最初と二番目の分割 (同じ区切り文字を 2 回) や、どの部分がテキストであるかの代わりに、次のようにするだけです。
数字を見つけてください:)
ID #30-2 がないことを祈ります...
または説明: 42
New Column( "IDs",
Character,
"Multiple Response",
Formula(
Concat Items(
Transform Each( {theWord}, Words( :Input, ";#" ),
Char( Num( theWord ) )
),
""
)
),
Set Property( "Multiple Response", Multiple Response( Separator( "." ) ) ),
)
Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にする使用を提案することはありませんJMPの文字パターン理解するのはかなり難しいため(少なくともさまざまな機能すべて)、しかし私はこれを使用して(おそらく)なんとかこれを行うことができました
Names Default To Here(1);
str = "3.4 Offline Optimization & Simulation Tools;#15;#3.9 Simulation;#30;#4.6 Material Balance;#22";
idlist2 = {};
resval = "";
Pat Match(str, Pat Span("#") + Pat Regex("\d+?") >> next_id + Pat Regex("(;|$)") + Pat Test(
Insert Into(idlist2, next_id); resval = Concat Items(idlist2, ", "))
);
show(idlist2, resval);
これを数式で使用する例です
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Column 1",
Character,
"Nominal",
Set Values(
{
"3.4 Offline Optimization & Simulation Tools;#15;#3.9 Simulation;#30;#4.6 Material Balance;#22"
}
)
),
New Column("Column 2",
Character,
"Multiple Response",
Formula(
idlist2 = {};
resval = "";
Pat Match(
:Column 1,
Pat Span("#") + Pat Immediate(Pat Regex("\d+?"), next_id)
+Pat Regex("(;|$)") + Pat Test(
Insert Into(idlist2, next_id);
resval = Concat Items(idlist2, ", ");
)
);
resval;
),
Set Property("Multiple Response", Multiple Response(Separator(",")))
)
)Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にするありがとう、ジム! REGEX の有無にかかわらず、ある種のループがうまくいくだろうと考えていました。 元気でいることを願っています!
Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にするジャーモ: ご苦労様でした! スクリプト マニュアルの REGEX セクションと Pat Match セクションを読み、絶対に必要な場合を除き、Pat Match は試行しないことにしました...
Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にするhogi:お二人ともご応募ありがとうございました! 私は以前 Words() を使用したことがありましたが、早い段階で REGEX ソリューションを追求する必要があると自分自身に確信していたため、それについては考えませんでした。 このソリューションは非常にエレガントです。 Concat Items() について読む必要があります...
ジム/ジャーモ/ホギ: あなたはコミュニティの世界的な力を示しました! 私は今クアラルンプールにいます。 私はこれを朝一番にあなたが寝ようとしている/すでに寝ているであろうときに投稿しました。 午後遅くまでにあなたから解決策を受け取りました。 ありがとうございました!
Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にする@ホギ書きました:
... 複雑な 1 秒目から 2 秒目の分割 ...
実際 - 思ったよりも複雑ではありません:)
New Column( "IDs",
Character,
"Multiple Response",
Formula(
splitItems = Words( :Input, ";#" );
Concat Items( splitItems[2:: N Items( splitItems ):: 2], "," );
)
)
...そして、Jmp の次のバージョンの 1 つでは、それがさらに簡単になります。
https://community.jmp.com/t5/JMP-Wish-List/new-slicing-options-for-matrices/idc-p/614326/highlight/true#M4057
Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にする必要な変更は、JMP が複数の応答として認識する 1 つの現在の区切り文字です。 この場合、Substitute 機能もうまく機能します。
Re: 文字列から必要な要素をすべて抽出して多重応答分析を有効にする?