ある項目の文字列値から特定の文字のみを除去あるいは取得する処理について。
問題
とある生データについて、ある項目の値である文字列から数字のみを抜き出して出力したい。
データ例:「test day1」→「1」にしたい。
解決
COMPRESS関数を用いて、数字のみを抽出します。
・使用した関数
COMPRESS
使用方法
COMPRESS('項目',,'KD')
→項目の文字列から数字のみが除去される。
KDについて、これは修飾子により取得する文字列を制御した形になります。
Kで第二引数について、数字を扱うよう追加し、Dで第二引数の値のみを第一引数の文字列から残すことを定義します。
例:
data a;
txt=compress('あいうえお100',,'KD');
run;
結果
txt=100
COMPRESSについて
元の文字から指定した文字を削除した文字列を返す関数。これで不要な文字列の削除などが可能になります。
第1引数のみ指定すると、文字列中のブランクが除去されます。基本的にこの用法が多いです。
※全角スペースは除去できません。
構文
COMPRESS(文字列, 文字列から消したい文字, 修飾子)
第一引数:文字列
ここで指定された文字列から、特定の文字が削除されます。
この引数には文字定数、変数または式を指定します。必須項目。
第二引数:文字列から消したい文字
文字列から消したい文字を記載します。このリスト内の文字が第1引数の文字列から削除されます。
好きな文字を削除できますが、2文字以上の組み合わせの文字列を削除することはできません。
(→連続した文字列の削除方法についてこちらを参照ください。https://www.sas.com/offices/asiapacific/japan/service/technical/faq/list/body/ba045.html)
また、第3引数に修飾子※後述を指定することで様々な拡張が可能です。
文字リストを初期化する文字定数、変数または式を指定します。
※値にはクォーテーションマークが必要です。
第三引数:修飾子
第二引数で設定した削除リストに定数を追加したり(d修飾子など)、逆に削除リストの文字列のみ残すよう(K修飾子)できます。
文字定数、変数または式を指定します。
※値にはクォーテーションマークが必要です。
修飾子として使用できる文字は次のとおりです。
aまたはA 文字のリストにアルファベット文字を追加します。→アルファベット(A-Z)消します。
cまたはC 文字のリストに制御文字を追加します。→改行などを消します。
dまたはD 文字のリストに数字を追加します。→数字(0‐9)消します。
fまたはF アンダースコア文字および英文字を文字リストに追加します。→アンスコ(_)とアルファベット消します。
gまたはG 文字のリストにグラフィカル文字を追加します。→図形文字(数字、英字、仮名、漢字、仮名、特殊文字といったおおよそ目に見える文字)
hまたはH 文字のリストに水平タブを追加します。
iまたはI 保持する、または削除する文字の大文字と小文字を区別しません。
kまたはK リスト内の文字を削除するのではなく、保持します。→第二引数の文字のみを保持します。
lまたはL 小文字を文字リストに追加します。
nまたはN 数字、アンダースコア文字および英文字を文字リストに追加します。
oまたはO COMPRESS関数が呼び出されるたびに第2引数および第3引数を実行するのではなく、一度だけ実行します。DATAステップ(WHERE句を除く)またはSQLプロシジャでO修飾子を使用すると、第2引数および第3引数が変更されないループでCOMPRESSを呼び出すときに、より迅速に実行できます。
pまたはP 文字のリストに句読点を追加します。
sまたはS 文字のリストに空白文字(空白、水平タブ、垂直タブ、キャリッジリターン、ラインフィード、フォームフィード、NBSP ('A0'x - 10進数のASCIIコードで160))を追加します。
tまたはT 第1引数と第2引数から末尾の空白を取り除きます。
uまたはU 大文字を文字リストに追加します。
wまたはW 印刷可能文字を文字リストに追加します。
xまたはX 文字のリストに16進文字を追加します。
ヒント
modifierが定数の場合、引用符で囲みます。一組の引用符で複数の定数を指定します。modifierを変数または式として表すこともできます。