前のページ|次のページ

%DO %WHILEステートメント

条件がtrueの間はマクロのセクションを繰り返し実行します。

種類: マクロステートメント
制限事項: マクロ定義でのみ使用可能
参照項目: %ENDステートメント

構文

%DO %WHILE (expression);

text and macro program statements
%END;

必須引数

expression

論理値に置換される任意のマクロ式を指定します。マクロプロセッサは、各反復の先頭でこの式を評価します。この式の値がゼロ以外の整数である場合、この式はtrueになります。この式の値がゼロである場合、この式はfalseになります。この式がヌル値に置換されるか、または非数値文字を含む値に置換される場合、マクロプロセッサはエラーメッセージを発行します。

%DO %WHILEステートメントに指定する式の例を次に示します。
 
  • %do %while(&a<&b);
  • %do %while(%length(&name)>20);

詳細

%DO %WHILEステートメントは、ループの先頭で条件をテストします。マクロプロセッサが条件を初めてテストした場合にその条件がfalseであった場合、%DO %WHILEは反復されません。

例: タイトルからマークアップタグを削除する

次の例では、%DO %WHILEステートメントを使用して、テキストからマークアップ(SGML)タグを削除し、TITLEステートメントを生成します。
%macro untag(title);
      %let stbk=%str(<);
      %let etbk=%str(>);
      /* Do loop while tags exist  */
   %do %while (%index(&title,&stbk)>0) ;
      %let pretag=;
      %let posttag=;
      %let pos_et=%index(&title,&etbk);
      %let len_ti=%length(&title);
          /* Is < first character? */
      %if (%qsubstr(&title,1,1)=&stbk) %then %do;
         %if (&pos_et ne &len_ti) %then
            %let posttag=%qsubstr(&title,&pos_et+1);
      %end;
      %else %do;
         %let pretag=%qsubstr(&title,1,(%index(&title,&stbk)-1));
            /* More characters beyond end of tag (>) ? */
         %if (&pos_et ne &len_ti) %then
            %let posttag=%qsubstr(&title,&pos_et+1);
      %end;
         /* Build title with text before and after tag */
      %let title=&pretag&posttag;
   %end;
title "&title";
%mend untag;
マクロUNTAGを次のように呼び出したとします。
%untag(<title>Total <emph>Overdue </emph>Accounts</title>)
この場合、同マクロは次のようなTITLEステートメントを生成します。
TITLE "Total Overdue Accounts";
タイトルテキストにカンマなどの特殊文字が含まれている場合、引数に対して%NRSTR関数を適用した上でマクロUNTAGを呼び出します。
%untag(
   %nrstr(<title>Accounts: Baltimore, Chicago, and Los Angeles</title>))
前のページ|次のページ|ページの先頭へ