かきためぬ

書き溜めたいきもちは山々だけど

【SAS】文字列連結① 区切り文字を使う連結で、余計な空白にイライラしない【CATX関数】

例えば別々の変数に入った値「dog」「cat」「rabbit」「bird」「mouse」みたいなのを「/」で区切って「dog/cat/rabbit/bird/mouse」としてひとつの変数に入れたいとき、単純に連結演算子(||)だけを使うと余計な空白が入る。さらにもし連結する変数が多かったら書くのが大変になる。

CATX関数を使うと先頭と末尾の空白も削除されてコードの見た目もすっきりする。

 /*元データ作成*/
 data sample1;
   length animal1-animal5 $10. ;
   input animal1-animal5;
   datalines;
   dog
   cat
   rabbit
   bird
   mouse
   ;
 run;
 /*文字列連結*/
 data sample2;
   set sample1;
   length animal_all1 animal_all2 $100.;
   
   *連結演算子だけ使って連結;
   animal_all1=animal1||'/'||animal2||'/'||animal3||'/'||animal4||'/'||animal5;
   
   *CATX関数を使って連結;
   animal_all2=catx('/',of animal1-animal5);
   
   keep animal_all:;   
 run;
  • 結果比較

f:id:hhohh:20161211111136p:plain


連結演算子の方は「dog」の後とかに余計な空白(長さ10を指定してる変数なので、その長さに足りない分空白入れてくれちゃってる)が入るけど、CATX関数の方は入ってない。