前のページ|次のページ

%KSUBSTRと%QKSUBSTRマクロ関数

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

カテゴリ: DBCS
種類: NLSマクロ関数

構文

%KSUBSTR (argument, position<, length> )
%QKSUBSTR (argument, position<, length> )

必須引数

argument

文字列またはテキスト式です。argumentが後述する特殊文字またはニーモニック演算子を含む場合は、%QKSUBSTRを使用します。

position

整数または整数を生成する (テキスト、論理、算術)式です。この整数は、部分文字列の先頭文字の位置を表します。positionが文字列の文字数より大きい場合、%KSUBSTRと%QKSUBSTRは警告メッセージを発行して、NULL値を返します。

length

整数または整数を生成する(テキスト、論理、算術)式です(オプション)。この整数は、部分文字列の文字数を表します。lengthargument内のposition以降の文字数より大きい場合、%KSUBSTRと%QKSUBSTRは警告メッセージを発行して、positionから文字列の末尾までの文字で構成される部分文字列を返します。デフォルトで、 %KSUBSTRと%QKSUBSTRはpositionから文字列の末尾までの文字で構成される文字列を作成します。

詳細

%KSUBSTRと%QKSUBSTR関数は、argument内のposition位置からlengthの文字数分の文字で構成される部分文字列を生成します。
%KSUBSTRは、特殊文字とニーモニック演算子をマスクせずに値を返します。%QKSUBSTRは、次の特殊文字とニーモニック演算子をマスクします。
& % ' " ( ) + − * / < > = ¬ ^ ~ ; , #  blank
AND OR NOT EQ NE LE LT GE GT IN

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

マクロMAKEFREFは%KSUBSTRを使用して、ユーザーが割り当てたパラメータが8文字より長い場合、先頭の8文字をファイル参照名に割り当てます。
%macro makefref(fileref,file);
   %if %klength(&fileref) gt 8 %then
       %let fileref = %ksubstr(&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(%klength(&&msg&i)<40);
             %let msg&i=%qksubstr(&msg,&start,40);
             %put Message &i is: &&msg&i;
             %let i=%eval(&i+1);
             %let start=%eval(&start+40);
             %let msg&i=%qksubstr(&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: %KSUBSTRと%QKSUBSTRの処理の比較

%KSUBSTRは、C言語で特殊文字とニーモニック演算子をマスクせずに結果を処理するため、名前が解決された結果を生成します。
%let a=one;
%let b=two;
%let c=%nrstr(&a &b);
%put C: &c;
%put With KSUBSTR: %ksubstr(&c,1,2);
%put With QKSUBSTR: %qKsubstr(&c,1,2);
これらのステートメントが実行されると、次の行がSASログに出力されます。
C: &a &b
With KSUBSTR: one
With QKSUBSTR: &a
前のページ|次のページ|ページの先頭へ