前のページ|次のページ

%SUBSTR関数と%QSUBSTR関数

文字列の部分文字列を生成します。

種類: マクロ関数
参照項目: %NRBQUOTE関数

構文

%SUBSTR(argument, position<, length>)
%QSUBSTR (argument, position<, length> )

必須引数

argument

文字列またはテキスト式を指定します。argumentが次に示すような特殊文字やニーモニック演算子を含んでいる場合、%QSUBSTRを使用します。

position

部分文字列内の先頭文字の位置を表す整数、またはそのような整数を生成する式(テキスト式、論理式、演算式)です。positionの値が文字列内の文字数よりも大きい場合、%SUBSTR関数および%QSUBSTR関数は警告メッセージを発行し、ヌル値を返します。%EVAL関数が自動的に呼び出されるため、nは数値として扱われます。

length

部分文字列内の文字数を表すオプション整数、またはそのような整数を生成する式(テキスト式、論理式、演算式)です。lengthの値が、argument内のposition以降にある文字数よりも大きい場合、%SUBSTR関数および%QSUBSTR関数は警告メッセージを発行し、positionから文字列の末尾までの文字を含む部分文字列を返します。デフォルトでは、%SUBSTR関数および%QSUBSTR関数は、positionから文字列の末尾までの文字を含む部分文字列を返します。

詳細

%SUBSTR関数および%QSUBSTR関数は、argumentに指定された文字列のposition番目の文字から数えてlength個目までの文字を含む部分文字列を返します。
%SUBSTR関数は、引数がそれまでマクロクォーティング関数によりマスクされていた場合であっても、同関数が返す結果内で特殊文字やニーモニック演算子をマスクしません。%QSUBSTR関数は、次に示す特殊文字とニーモニック演算子をマスクします。
& % ' " ( ) + − * / < > = ¬ ^ ~ ; , #  blank
AND OR NOT EQ NE LE LT GE GT IN

比較

%QSUBSTR関数は、%NRBQUOTE関数と同じ文字をマスクします。

例1: ファイル参照名を8文字に制限する例

マクロMAKEFREFは、パラメータに8文字を超える長さの値が指定された場合、%SUBSTR関数を使用して同パラメータ値の最初の8文字をファイル参照名に割り当てます。
%macro makefref(fileref,file);
   %if %length(&fileref) gt 8 %then
       %let fileref = %substr(&fileref,1,8);
   filename &fileref "&file";
%mend makefref;
%makefref(humanresource,/dept/humanresource/report96)
このマクロを実行すると、次のSASステートメントが生成されます。
FILENAME HUMANRES "/dept/humanresource/report96";

例2: セグメントに長いマクロ変数値を保存する例

マクロSEPMSGは、マクロ変数MSGの値を40文字からなるユニットに分割し、各ユニットを別々の変数に格納します。
%macro sepmsg(msg);
   %let i=1;
   %let start=1;
   %if %length(&msg)>40 %then
      %do;
          %do %until(%length(&&msg&i)<40);
             %let msg&i=%qsubstr(&msg,&start,40);
             %put Message &i is: &&msg&i;
             %let i=%eval(&i+1);
             %let start=%eval(&start+40);
             %let msg&i=%qsubstr(&msg,&start);
          %end;
          %put Message &i is: &&msg&i;
      %end;
   %else %put No subdivision was needed.;
%mend sepmsg;
%sepmsg(%nrstr(A character operand was found in the %EVAL function
or %IF condition where a numeric operand is required.  A character
operand was found in the %EVAL function or %IF condition where a
numeric operand is required.));
このプログラムを実行すると、SASログに次のメッセージが書き込まれます。
Message 1 is:A character operand was found in the %EV Message 2 is:AL function or  %IF condition where a nu Message 3 is: meric operand is required.A character Message 4 is: operand was  found in the %EVAL function Message 5 is:or %IF condition where a numeric operan Message 6 is: d is required.

例3: %SUBSTR関数と%QSUBSTR関数のアクションの比較

次の例では、変数Cの値が%NRSTR関数によりマスクされているため、変数Cの値はコンパイル時には置換されません。ただし、変数Cの値が%NRSTR関数により事前にマスクされていたとしても、%SUBSTR関数は、変数Cに含まれている特殊文字やニーモニック演算子をマスクせずに変数Cの値を処理するため、%SUBSTR関数は置換された結果を生成します。
%let a=one;
%let b=two;
%let c=%nrstr(&a &b);
%put C: &c;
%put With SUBSTR: %substr(&c,1,2);
%put With QSUBSTR: %qsubstr(&c,1,2);
これらのステートメントを実行すると、次の行がSASログに書き込まれます。
C:&a &b With SUBSTR: one With QSUBSTR:&a
前のページ|次のページ|ページの先頭へ