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

2017年5月11日木曜日

My Favorite SAS Functions (2) CATX関数



第2回目は、CATX関数。
この関数は「文字列同士を区切り記号付きで連結する」という機能を持っています。


構文

  CATX( "区切り文字" , 変数1, 変数2, ・・・ )


  • 変数値の先頭か末尾に半角スペースがある場合は、それらを削除してから結合する
  • 文字変数が欠損値の場合は、その変数はスキップされる (区切り文字もつかない)

基本的な構文や機能は以下記事で紹介済みなので、そちらをご覧ください。
http://sas-boubi.blogspot.jp/2015/11/catx.html





例えば、以下X1~X4までの変数値を連結してYのような文字列を作りたいとします。

  X1  
  X2  
  X3  
  X4  
   
  aa      bb  cc  aa,bb,cc 


今までは、以下Beforeのようなメンドクサイ書き方をする必要ありました。あー面倒だなーって言いながら書いてました。
それがAfterのようにCATX関数を使えば超スッキリと短い文で書けてしまいます。

Before
  length Y $20.;
  array AR(*) X1-X4;
  do i=1 to dim(AR);
     if AR(i)^="" then do;
        if Y = "" then Y=left(AR(i));
        else Y = trim(left(Y)) || "," || trim(left(AR(i)));
     end;
  end;


After
  length Y $20.;
  Y = catx( "," ,X1,X2,X3,X4 );


今でこそ当たり前につかってますが、知ったときは感動しました。



記事一覧

1.CATS関数
2.CATX関数

2015年11月17日火曜日

区切り文字をつけて変数値同士を結合する【CATX関数】



「文字変数」区切り文字つきで結合」する方法を紹介。



data DT1;
   length  A B C D $5.  VAR1 $30.;
   A = "aa";
   B = "bb";
   C = "";
   D = "dd";

   * 区切り文字をつけて文字変数の値を結合 ;
   VAR1 = catx( "," , A, B, C, D ) ;
run;

A
 B 
  C  
 D 
 VAR1 
  aa  
  bb  
  
  dd 
  aa,bb,dd 


CATX関数は変数値を区切り文字つきで結合してくれます。


構文


  CATX( "区切り文字" , 変数1, 変数2, ・・・ )



ポイント
  • 変数値の先頭か末尾に半角スペースがある場合は、それらを削除してから結合する。
  • 文字変数が欠損値の場合は、その変数はスキップされる (区切り文字もつかない)。
    • 上の例では、Cが欠損値なので「aa,bb,,dd」ではなく「aa,bb,dd」となります。