前のページ|次のページ

CATQ関数

区切り文字を使用して各項目を区切り、区切り文字を含む文字列に引用符を追加して文字値または数値を連結します。

カテゴリ: 文字

構文

CATQ(modifiers <, delimiter>, item-1 <, …, item-n>)

必須引数

modifier

文字定数、変数または式を指定します。これらの空白以外の各文字でCATQ関数のアクションを変更します。空白は無視されます。次の文字を修飾子として使用できます。

1または'

CATQは、文字列に引用符を追加するときに一重引用符を使用します。

2または"

CATQは、文字列に引用符を追加するときに二重引用符を使用します。

aまたはA

すべての項目引数に引用符を追加します。

bまたはB

SまたはT修飾子で削除されていない先頭や末尾の空白がある項目引数に引用符を追加します。

cまたはC

区切り文字としてカンマを使用します。

dまたはD

指定の区切り文字引数があることを示します。

hまたはH

区切り文字として水平タブを使用します。

mまたはM

最初の項目引数以降の各項目引数に区切り文字を挿入します。M修飾子を使用しない場合、CATQは他の修飾子で指定された処理の後に長さがゼロの項目引数の区切り文字を挿入しません。M修飾子を使用すると、区切り文字が結果の最初または最後に表示される可能性があります。また、複数の連続する区切り文字が結果に表示される場合もあります。

nまたはN

値がSAS名の通常の構文規則に準拠していない場合に項目引数を名前リテラルに変換します。名前リテラルは、引用符に囲まれた空白のない文字列で、後に文字"N"が続きます。SASステートメントで名前リテラルを使用するには、SASオプションVALIDVARNAME=ANYを指定する必要があります。

qまたはQ

すでに引用符が含まれている項目引数に引用符を追加します。

sまたはS

後で処理される引数の先頭および末尾の空白を削除します。

  • 区切り文字引数の先頭および末尾の空白を削除する場合、D修飾子の前にS修飾子を指定します。
  • 項目引数の先頭および末尾の空白は削除するが、区切り文字引数の先頭および末尾の空白は削除しない場合、D修飾子の後にS修飾子を指定します。

tまたはT

後で処理される引数の末尾の空白を取り除きます。

  • 区切り文字引数の末尾の空白を削除する場合、D修飾子の前にT修飾子を指定します。
  • 項目引数の末尾の空白は削除するが、区切り文字引数の末尾の空白は削除しない場合、D修飾子の後にT修飾子を指定します。

xまたはX

値に印刷不可文字が含まれている場合に項目引数を16進リテラルに変換します。

ヒント modifierが定数の場合、引用符で囲みます。modifierを変数名または式として表すこともできます。
A、B、N、Q、S、T、X修飾子は、CATQ関数内部で動作します。項目引数が変数の場合、結果がその変数に割り当てられていない限り、その変数の値はCATQによって変更されません。

item

文字または数値の、定数、変数または式を指定します。itemが数値の場合、その値はBESTw.出力形式を使用して文字列に変換されます。この場合、先頭の空白は削除され、ログにメモは記録されません。

オプション引数

delimiter

連結文字列間の区切り文字として使用する文字定数、変数または式を指定します。この引数を指定する場合、D修飾子も指定する必要があります。

詳細

返される変数の長さ

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

基本

C、DまたはH修飾子を使用しない場合、CATQは区切り文字として空白を使用します。
modifierに引用符、あるいは1または2修飾子のいずれも指定しないと、CATQは引用符が必要な場合に各項目引数に使用する引用符の種類を独自に決定します。次のルールが適用されます。
  • CATQは、アンパサンド(&)やパーセント(%)記号を含む文字列、または一重引用符より二重引用符の方が多い文字列には、一重引用符を使用します。
  • その他のすべての文字列には二重引用符を使用します。
CATQ関数は、結果を初期化して長さをゼロにし、各項目引数で次のアクションを実行します。
  1. itemが文字列でない場合、CATQはBESTw形式を使用してitemを文字列に変換し、 先頭の空白を削除します。
  2. S修飾子を使用している場合、CATQは文字列から先頭の空白を削除します。
  3. SまたはT修飾子を使用すると、CATQは文字列から末尾の空白を削除します。
  4. CATQは、次の条件に基づいて引用符を追加するかどうかを決定します。
    • X修飾子を使用する場合、文字列に制御文字が含まれていると、文字列は16進リテラルに変換されます。
    • N修飾子を使用する場合、次のいずれかの条件に該当すると、文字列は名前リテラルに変換されます。
      • 文字列の最初の文字がアンダースコアまたは英字ではない。
      • 文字列に数字、アンダースコアまたは英字以外の文字が含まれている。
    • XまたはN修飾子を使用しない場合、次のいずれかの条件に該当すると、CATQは引用符を文字列に追加します。
      • A修飾子を使用している。
      • B修飾子を使用していて、SまたはT修飾子で削除されなかった先頭や末尾の空白が文字列に含まれている。
      • Q修飾子を使用していて、文字列に引用符が含まれている。
      • 先頭および末尾の空白を削除した状態で区切り文字と同じになる部分文字列が文字列に含まれている。
  5. 2番目以降の項目引数では、CATQは次のいずれかの条件に該当する場合に区切り文字を結果に追加します。
    • M修飾子を使用している。
    • 前述のステップで処理された後の文字列の長さがゼロよりも大きい。
  6. CATQは結果に文字列を追加します。

比較

CATX関数はCATQ関数と類似していますが、CATXは引用符を追加しない点が異なります。

例: CATQ関数を使用した文字列の連結

次の例では、CATQ関数がどのように文字列を連結するのかを示します。
options ls=110;
data _null_;
   result1=CATQ(' ',
                'noblanks',
                'one blank',
                12345,
                '  lots of blanks    ');
   result2=CATQ('CS',
                'Period (.)                 ',
                'Ampersand (&)              ',
                'Comma (,)                  ',
                'Double quotation marks (") ',
                '   Leading Blanks');
   result3=CATQ('BCQT',
                'Period (.)                 ',
                'Ampersand (&)              ',
                'Comma (,)                  ',
                'Double quotation marks (") ',
                '   Leading Blanks');
   result4=CATQ('ADT',
                '#=#',
                'Period (.)                 ',
                'Ampersand (&)              ',
                'Comma (,)                  ',
                'Double quotation marks (") ',
                '   Leading Blanks');
   result5=CATQ('N',
                'ABC_123   ',
                '123    ',
                'ABC 123');
   put (result1-result5) (=/);
run;
次の出力がログに書き込まれます。
result1=noblanks "one blank" 12345 " lots of blanks " result2=Period (.),Ampersand (&),"Comma (,)",Double quotation marks ("),Leading Blanks result3=Period (.),Ampersand (&),"Comma (,)",'Double quotation marks (")'," Leading Blanks" result4="Period (.)"#=#'Ampersand (&)'#=#"Comma (,)"#=#'Double quotation marks (")'#=#" Leading Blanks" result5=ABC_123 "123"n "ABC 123"n

関連項目:

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