2017年9月22日金曜日

指定した1文字を削除する【COMPRESS/KCOMPRESS関数編】



指定した1文字を削除する方法として、今回は「COMPRESS関数」または「KCOMPRESS関数」を使ってみます。

これら関数は空白を削除するためのものと思われがちですが、実はそれだけじゃなく非常に奥が深い関数です。





*** Sample data ;
data DT1;
   length X $20.;
   X="<10"; output;
   X=">10"; output;
   X="10 to 20"; output;
run;

たとえば、上の変数X から「<」または「>」の1文字をそれぞれ削除したいとします。



まず以下の通り、取り扱う変数値・文字値の種類によって、関数を使い分けます。

・COMPRESS ・・・ シングルバイトのみの場合(半角英数など)
・KCOMPRESS ・・・ マルチバイトを含む場合(日本語などの全角文字など)


*** 変数値から「<」と「>」を削除する ;
data DT2;
   set DT1;
   length Y $20.;
   Y = compress( X , "<>" );
run;


使い方
① 削除したい1文字を第2引数に列挙します。
例えば「a」または「b」という1文字を削除したい場合は「"ab"」と指定します。

例)compress( 変数 , "ab" )


② 以下のリンク記事で解説してる通り、日本語などのマルチバイト文字が含まれる場合は結果がバグってしまう事があるので、KCOMPRESS関数を使用しましょう。

関数の落とし穴




指定した文字列を削除するには?

連続する文字列を削除したい場合、
たとえば「a」または「b」を削除する、、のではなく「ab」を削除する。みたいな事をしたい場合は、以下記事の最後の方で紹介してるので、参考までに。

文字列の置換をするTRANWRD vs TRANSTRN関数

0 件のコメント:

コメントを投稿