2015年8月28日金曜日

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





両方とも文字列を置換する関数です。



構文

TRANWRD( 対象変数or文字列 , 置き換えたい文字列 , 置き換え後の文字列  )
TRANSTRN( 対象変数or文字列置き換えたい文字列 , 置き換え後の文字列  )







例1 ・・・ 文字列の置き換え
data OUT1;
   length A B1 B2 $10.;

   A = "aabb";
   B1 = tranwrd( A, "ab", "X" );
   B2 = transtrn( A, "ab", "X" );
run;

 A 
 B1 
 B2 
 aabb 
  aXb  
  aXb  



例2 ・・・ 文字列の削除
data OUT2;
   length A B1 B2 $10.;
   A = "abc";

   B1 = tranwrd( A, "b", "" );
   B2 = transtrn( A, "b", "" );
run;

 A 
 B1 
 B2 
 abc 
  a c  
  a c  

削除した「b」の部分に半角スペースが残ってしまいます。(仕様っぽいです)



例3 ・・・ 文字列の削除
data OUT2;
   length A B1 B2 $10.;
   A = "abc";

   B1 = tranwrd( A, "b", trimn("") );
   B2 = transtrn( A, "b", trimn("") );
run;

 A 
 B1 
 B2 
 abc 
  a c  
  ac  

TRANSTRN関数の方は、trimn("") とすると文字列を削除すると同時に半角スペースも詰められます。




注意
SAS9.4のマニュアルを見ると、TRANWRD、TRANSTRN、TRIMN関数は日本語などのマルチバイト文字も対応していますが、それより前のバージョンでマルチバイト対応しているかは未確認なので、ご注意ください。
(関連記事 : 関数の落とし穴




利用例


SAS社ホームページに「指定した文字列を削除する」というFAQがあります。

変数値から 「株式会社」 という文字列を削除したいというもので、
昔は、これだけの処理をするのも大変でしたが、今はTRANSTRN関数で一発解決です。
(しつこいようですが、SAS9.4での例になります。それより前のバージョンでは正しく動作するか未確認)


data out1;
   length NAME NAME2 $50.;
   NAME = "(abcd株式会社)";
   NAME2 = transtrn( NAME, "株式会社", trimn("") );
run;

 NAME
 NAME2 
 (abcd株式会社) 
  (abcd) 



0 件のコメント:

コメントを投稿