前のページ|次のページ

CATX関数

先頭と末尾の空白を削除し、区切り文字を挿入して、連結文字列を返します。

カテゴリ: 文字
制限事項: この関数は、I18Nレベル2に準拠しており、SBCS、DBCSおよびMBCS(UTF8)での使用目的で設計されています。

構文

CATX(delimiter, item-1 <, ... item-n>)

必須引数

delimiter

連結項目間の区切り文字として使用する文字列を指定します。

item

文字または数値の、定数、変数または式を指定します。itemが数値の場合、その値はBESTw.出力形式を使用して文字列に変換されます。この場合、ログにメモは記録されません。詳細については、基本を参照してください。

詳細

基本

CATX関数は、まずitem-1を先頭および末尾の空白を削除して結果にコピーします。次に、CATXは後続の各引数item-i (i=2, …, n)で、item-iに1つ以上の空白以外の文字が含まれている場合にdelimiterおよびitem-iを結果に追加します。このとき、item-iから先頭および末尾の空白を削除します。CATXは、結果の先頭または末尾に区切り文字を挿入しません。空白の項目では、結果の先頭または末尾に区切り文字は生成されません。また、複数の連続する区切り文字も生成されません。

返される変数の長さ

DATAステップで、まだ長さが割り当てられていない変数にCATX関数から値が返される場合、その変数には200バイトの長さが設定されます。まだ長さが割り当てられていない変数に連結演算子(||)から値が返される場合、その変数の長さは結合されている値の長さの合計になります。

返される変数の長さ:特殊なケース

CATX関数は、変数または一時バッファに値を返します。CATX関数の戻り値の長さは次のとおりです。
  • 最大200文字(WHERE句およびPROC SQL)
  • 最大32767文字(WHERE句以外のDATAステップ)
  • 最大65534文字(CATXがマクロプロセッサから呼び出される場合)
CATXが値を一時バッファに返す場合、バッファの長さは呼び出し環境によって異なります。バッファの値はCATXの処理後に切り捨てられる可能性があります。この場合、切り捨てに関するメッセージはログに出力されません。
変数またはバッファの長さが不十分で連結結果を格納できない場合、SASは次の手順を実行します。
  • DATAステップおよびPROC SQLの結果を空白値に変更します。
  • 呼び出し環境に応じて、結果が切り捨てられたことを示す警告メッセージ、または空白値に設定されたことを示す警告メッセージがログに出力されます。
  • 関数呼び出しの場所と、切り捨ての原因となった引数のリストを示すメモがログに出力されます。
  • DATAステップで_ERROR_を1に設定します。

比較

CAT、CATS、CATT、CATX関数の結果は、一般的に連結演算子(||)とTRIMおよびLEFT関数の特定の組み合わせによって生成される結果と同じになります。ただし、CAT、CATS、CATT、CATX関数のデフォルトの長さは、連結演算子の使用時に取得する長さとは異なります。詳細については、返される変数の長さを参照してください。
CAT、CATS、CATT、CATX関数はTRIMおよびLEFT関数よりも速く、変数リストをサポートする呼び出し環境では、変数リストに対応するOF構文で使用できます。
注: 欠損値のある変数の場合、連結で異なる結果が生成されます。欠損値のある文字列の連結を参照してください。
次の表に、CAT、CATS、CATT、CATX関数と同等のコードを示します。X1 - X4の変数は文字変数を指定し、SPは空白やカンマなどの区切り文字を示します。
関数
同等のコード
CAT(OF X1-X4)
X1||X2||X3||X4
CATS(OF X1-X4)
TRIM(LEFT(X1))||TRIM(LEFT(X2))||TRIM(LEFT(X3))||
TRIM(LEFT(X4))
CATT(OF X1-X4)
TRIM(X1)||TRIM(X2)||TRIM(X3)||TRIM(X4)
CATX(SP, OF X1-X4)
TRIM(LEFT(X1))||SP||TRIM(LEFT(X2))||SP||
TRIM(LEFT(X3))||SP||TRIM(LEFT(X4))

例1: 欠損値のない文字列の連結

次の例では、CATX関数がどのように欠損値のない文字列を連結するのかを示します。
data _null_;
   separator='%%$%%';
   x='The Olympic  '; 
   y='   Arts Festival ';
   z='   includes works by ';
   a='Dale Chihuly.';
   result=catx(separator, x, y, z, a);
   put result $char.; 
run;
次の出力がログに書き込まれます。
The Olympic%%$%%Arts Festival%%$%%includes works by%%$%%Dale Chihuly.   

例2: 欠損値のある文字列の連結

次の例では、CATX関数がどのように欠損値のある文字列を連結するのかを示します。
data one;
   length x1-x4 $1;
   input x1-x4;
   datalines;
A B C D
E . F G
H . . J
;
run;
data two;
   set one;
   SP='^';
   test1=catx(sp, of x1-x4);
   test2=trim(left(x1)) || sp || trim(left(x2)) || sp || trim(left(x3)) || sp || 
      trim(left(x4));
run;
   
proc print data=two;
run;
欠損値でCATXを使用する
欠損値でCATXを使用する

関連項目:

前のページ|次のページ|ページの先頭へ