列の末尾に文字値を含む列を再コード化するこんにちは、
次のようなテーブルがあります
| ID | 列2 |
| ABC001235G | |
| ABC001234 | |
| ABC001235 | |
| ABC001234D | |
| ABC001234F | |
「ABC001234D」や「ABC001234F」などのすべての値が「ABC001234」になるように、ID 列を再コーディングしたいと考えています。基本的に、ステートメントの最後の文字を削除したいのです。 ただし、これを手動プロセスで行うことはできません。 行数が多すぎて、スクリプトで使用できる ID ごとに手動で記述することはできません。 スクリプトを通じてこれを行う方法を探しています。 ありがとう!
高度な統計モデリング自動化とスクリプト作成データのブレンディングとクリーンアップマスカスタマイゼーションRe: 列の末尾に文字値を含む列を再コード化するこの場合は正規表現を使用します。 私はある時点で、少なくともあるレベルで正規表現を使用するためにこれを気に入っていました。レゲキソンこちらもチェックしてくださいJMP 文字関数 - 正規表現スクリプトインデックスからの正規表現。
JMP で正規表現を使用して末尾文字を削除する 2 つの可能な方法の例を次に示します (大文字以外の文字もサポートするように簡単に変更できます)。
Names Default To Here(1);
dt = New Table("Untitled 3",
Add Rows(5),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values(
{"ABC001235G", "ABC001234", "ABC001235", "ABC001234D", "ABC001234F"}
)
)
);
dt << New Column("Regex1", Character, Nominal, Formula(Regex(:ID, "^[A-Z]+(\d+)")));
dt << New Column("Regex2", Character, Nominal, Formula(Regex(:ID, "[A-Z]*$", "", GLOBALREPLACE);));
ユースケースに応じて、いずれかを選択してください (さまざまな文字列でどのように動作するかをサンプルコードでテストするのは簡単です)。
1 つ目は、文字列の先頭から 1 つ以上の大文字とそれに続く任意の数の数字に一致します (したがって、数字以降は無視されます)。
2 つ目は、文字列の末尾から 0 個以上の大文字と一致し、空の文字列に置き換えます。
Re: 列の末尾に文字値を含む列を再コード化するこれは次の式で実行できます。
val = Reverse( :ID );
While( Is Missing( Num( Substr( val, 1, 1 ) ) ),
val = Substr( val, 2 )
);
Reverse( val );
これにより、末尾の数値以外の値がすべて削除されます
Re: 列の末尾に文字値を含む列を再コード化するこんにちは、サニール!
ここに役立つ公式がありますが、命名規則と ID 変数の精度についていくつかの仮定を置く必要があります。
ID 値の先頭に一貫して 3 文字がある場合は、新しい列を作成して次の式を使用できます。
Substr( :ID, 1, 3 ) || Regex( :ID, "\d+" )
この式では、数値の長さが一貫していない場合があります。ID 値の先頭の文字数に一貫性がない場合に式を適応させることも、それほど難しいことではありません。ただし、誰かが ID を O (文字) ではなく 0 (数字) と間違えたり、その他の特定のタイプミスをしたりすると、予期しない結果が生じる可能性があります。
幸運を、
ケビン