我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

CATXの落とし穴

文字列結合ではよく見かけるCATS、CATXですが、CATXには空白を無視するという落とし穴があります。

下の例を見てみましょう
変数aからdをカンマ区切りの文字列にする場合の処理です。

data _null_;
  a='';
  b='a';
  c='';
  d='x';
  e=cats(a,',',b,',',c,',',d);
  f=catx(',',a,b,c,d);
  g=catx(',',of a--d);
run;

一見どれも同じように見えます。
むしろ、変数が増えれば増えるほどe>f>gの順に修正は楽になります。

しかしながら、生成される結果は以下のとおりです。
f:id:japelin:20210105110919p:plain

調べたらきちんと書いてありました。
CATX関数
「CATXは、結果の先頭または末尾に区切り文字を挿入しません。空白の項目では、結果の先頭または末尾に区切り文字は生成されません。また、複数の連続する区切り文字も生成されません。」

ということで、おとなしくcatsでちまちま結合するか、catqを使うか(構文が複雑なので自信がなく、全然使ったこと無いのですが)ですかね。