文字列の切り捨て<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />「Found in Version」という列を含む複数のデータ テーブルがあります。メジャー バージョンは通常 4 桁です --- マイナー バージョンでは、メジャー バージョン番号の末尾にアルファ文字が追加されることがあります。グラフ作成の目的で、マイナー バージョンを表示したくありません --- 代わりに、マイナー バージョンを関連するメジャー バージョンとマージしたいと思います。例えば...メジャー バージョンが 5.1.2.1 の場合、マイナー バージョン 5.1.2.1a も 5.1.2.1 と呼ばれるようにします.....
ミックスに別のしわを投げるために----すべての5.1.2.xを5.1.2に変換したいかもしれません----したがって、5.1.2.0、5.1.2.2a、5.1.2.3、5.1.2.4aなどは、バージョン 5.1.2 になります。
現在のコラムは「キャラクター」「名義」……列の文字列を、必要/希望する詳細レベルに応じて 7 文字または 5 文字に「切り詰める」ことを考えていましたが、その方法やより良い方法があるかどうかはわかりません。
さらに --- さまざまなチームからデータテーブルを受け取っています --- それぞれが異なるバージョン管理スキームを持っているようです --- したがって、柔軟性を組み込む必要があります --- 各データを分析する必要があるかどうかわかりません要素 s、および共通の文字を比較して、それらが同じバージョンに「属する」かどうかを確認します???

Re: 文字列の切り捨てここでの回答は非常に役に立ち、これを複雑にしすぎたのではないかと思いました --- そこで、文字関数「Left」を試しましたが、先週は機能しませんでした....私の構文は「オフ」だったに違いありません---今日はうまくいったからです..
| 行ごとに (: Vers Truncated で見つかりました= Left(:バージョンで見つかりました, 7)); |
---- これは単純に文字列を左端の文字に切り捨てます...これにより、下位バージョンの文字が取り除かれます ---さまざまなチームのバージョン番号が一貫していないためです (一部のチームは、アルファ文字を追加した 4 桁を使用します。アルファベット文字を追加せずに 3 桁を使用するものもあります) この方法はうまくいくと思いますが、切り捨てのレベルを判断するためにどのバージョン スキームが使用されているかをテストする必要があります....
Re: 文字列の切り捨て正規表現 (regex()) が問題に対処する可能性があると思います。
Newcolumn("Version Major で見つかりました",character,nominal,
formula(regex(:バージョンで見つかりました, ".*?(\d+\.\d+\.\d+).*","\1")
);
".*?(\d+\.\d+\.\d+).*" は、.*? の後に、任意の長さの数値、\d+、10 進数 1 回、\.、数値が続くことを意味します。任意の長さ、\d+、 10 進数の 1 回、\. 、任意の長さの数値、\d+、その後に任意のものが続きます。 かっこで囲まれた部分、数字と小数、\1 のみを返します。
マイナー バージョンでは、正規表現 (regex()) を変更して、10 進数と数字を 1 つ追加します。
Newcolumn("バージョン マイナーで見つかりました",文字,名義,
formula(regex(:バージョンで見つかりました, ".*?(\d+\.\d+\.\d+\.\d+).*","\1")
);
Re: 文字列の切り捨て一方、これはETLの核兵器であり、すべてを処理することが保証されていますが、より多くの作業が必要です. さまざまなサプライヤーが大幅に異なるプロセスに従っている場合、これが唯一の選択肢であることに気付くかもしれません。
サプライヤーごとに一意の適合表を作成するだけです。
データが持っています。
長さ FoundInVersion $32;
入力 FoundInVersion $;
カード;
5.1.2.1
5.1.2.2
5.2.2.2a
5.2.2.3
5.2.2.3x
5.2.2.9
5.2.2.9奇妙な
走る;
データ master_conversion;
長さ FoundInVersionGood FoundInVersion $32;
入力 FoundInVersionGood $ FoundInVersion $;
カード;
5.1.2 5.1.2.1
5.1.2 5.1.2.2
5.2.2 5.2.2.2a
5.2.2 5.2.2.3
5.2.2 5.2.2.3x
5.2.2 5.2.2.9
5.2.2 5.2.2.9奇妙な
走る;
proc sql;
create table want as
FoundInVersionGood を FoundInVersion として選択します
master_conversion 内部結合から
持っている (master_conversion.FoundInVersion = have.FoundInVersion);
やめる;
トム
Re: 文字列の切り捨て私はJMPユーザーではないので、SASコードを使用して申し訳ありません...おそらく同等の機能がJMPに存在しますか?
これは非常に単純で非常にばかげているため、データは完全に一致している必要があります。
データが持っています。
長さ FoundInVersion $32;
入力 FoundInVersion $;
カード;
5.1.2.1
5.1.2.2
5.2.2.2a
5.2.2.3
5.2.2.3x
5.2.2.9
5.2.2.9奇妙な
走る;
データが欲しい;
長さ FoundInVersionGood $32;
セットは持っています。
/* 区切り文字としてピリオドを使用して、最初、2 番目、3 番目の単語をスキャンし (SCAN)、それらをピリオドで連結します (CATX)。 */
/* 少なくとも 3 つのレベルが常に存在することを前提としています */
FoundInVersionGood = catx(".", scan(FoundInVersion,1,"."), scan(FoundInVersion,2,"."), scan(FoundInVersion,3,"."));
走る;
トム
Re: 文字列の切り捨てこれでうまくいきます。すべての値をループし、正規表現を使用して各値をテストします。
dt =現在のデータ テーブル() ;
dt <<新しい列( 「Vers Truncated で見つかりました」 、キャラクター、公称) ;
ために(私= 1 、私<=ナロー( dt ) 、私++、
テスト値=桁( dt 、 「バージョンで見つかりました」 )[私] ;
// 最後の文字が a から z のいずれかであるかどうかを確認します
もしも(不足している(正規表現(テスト値、 "[az]$" ))) 、
// それから
桁( dt 、 「Vers Truncated で見つかりました」 )[私] =テスト値;
、
// それ以外
ワンレングス=長さ(テスト値) ;
桁( dt 、 「Vers Truncated で見つかりました」 )[私] =サブストリング(テスト値、 1 、 (ワンレングス- 1 ))) ;
) ;
) ;
Re: 文字列の切り捨てやあ、
これがあなたが望むものかどうかわからない:
データが持っています。
古い入力:$10.;
カード;
5.1.2
5.1.2.1
5.1.2.1e
;
データが欲しい;
長さ 新しい $5;
セットは持っています。
新しい=古い;
走る;
proc 印刷;実行;
俳句