ラベル 関数: KCOMPRESS の投稿を表示しています。 すべての投稿を表示
ラベル 関数: KCOMPRESS の投稿を表示しています。 すべての投稿を表示

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関数

2015年8月18日火曜日

全角スペースを取り除いてくれる関数達




半角スペースを取り除いてくれる関数達」の全角バージョン。

関数仕様
KLEFT
  • 先頭の半角・全角スペースを取り除いて左寄せ。
  • 左寄せした分、半角スペースが末尾に足される
  • 一部の環境では先頭のUnicodeスペースも取り除くようです
KTRIM
  • 末尾の半角・全角スペースを取り除く
  • 一部の環境では末尾のUnicodeスペースも取り除くようです
KCOMPRESS
  • 文字列中の半角・全角スペースを取り除く
KSTRIP
  • 先頭と末尾の半角スペースのみを取り除く
  • 勘違いしやすいので、ここに注意として記載しましたが、全角スペースは取り除けない


注意点

① (2023/1/22確認)
以前のリファレンスには記述されていなかったのですが、一部環境において、
KLEFTでは先頭の、KTRIMでは末尾の「U+000A (改行)」「U+000D (キャリッジリターン)」等の「Unicodeスペース」っていうのも取り除くようです。


② 以下の記事で触れていますが、末尾のスペースを取り除いても、その結果を変数に格納した時点で、結局末尾に半角スペースが入ってしまうんで、そこの取り扱いだけ注意。