前のページ|次のページ

マクロクォーティングの機能

マクロプロセッサは、文字列をマスクするときに、コーディングスキーマに含まれる特殊文字およびニーモニックをマスクし、その文字列にデルタ文字と呼ばれる16進文字の接頭語および接尾語を付加します。接頭語は、文字列の先頭にマークを付け、文字列に適用されるマクロクォーティングのタイプも示します。接尾語は、文字列の末尾にマークを付けます。接頭語および接尾語が付加されても、文字列に含まれる先頭および末尾の空白は失われません。特殊文字とニーモニックのマスクに使用される16進文字、および接頭語と接尾語に使用される16進文字は、変わる場合があるため移植不可能です。
各バイトには、キーボード上のシンボルを表すのに必要な数よりも多い、使用可能な16進数の組み合わせがあります。したがって、マクロクォーティング関数がマスク対象の項目を認識すると、マクロプロセッサは、まだ使用されていない16進数の組み合わせを接頭語と接尾語に使用します。
%EVALや%SUBSTRなどのマクロ関数は、これらの接頭語と接尾語を無視します。したがって、これらの接頭語と接尾語が比較に影響を与えることはありません。
マクロプロセッサは、マクロクォーティングされた文字列の処理を終えると、マクロクォーティングコード付き置換文字を削除し、それらを元の文字に置き換えます。システムの他の処理には、マスク解除された文字が渡されます。場合によっては、マスク解除に関するメッセージが表示されることがあります。次に、その例を示します。
/* Turn on SYMBOLGEN so you can see the messages about unquoting. */
options symbolgen;

/* Assign a value to EXAMPLE that contains several special */
/* characters and a mnemonic. */
%let example = %nrbquote( 1 + 1 = 3 Today's Test and More );

%put *&example*;
このプログラムをサブミットすると、次のメッセージがSASログに表示されます。
SYMBOLGEN:   Macro variable EXAMPLE resolves to 1 + 1 = 3 Today's Test and More SYMBOLGEN:   Some characters in the above value which were subject to macro quoting have been unquoted for printing.* 1 + 1 = 3 Today's Test and More *
このログから分かるように、変数の値の先頭と末尾の空白および特殊文字は、維持されています。マクロプロセッサが文字列を処理している間、実際の文字列には、本来の文字を置換したコード付き文字が含まれています。置換文字には、文字列の先頭と末尾を表すコード付き文字が含まれています。先頭と末尾の空白は維持されています。また、各文字は、特殊文字+='、およびニーモニックANDを置換しています。マクロの処理が終了し、各文字がSASの他の処理に渡されるときに、コードが削除されて本来の文字に置き換えられます。
テキストのクォーティング解除 マスクされた文字列をクォーティング解除するときに何が起きるかについては、 SYMBOLGENシステムオプションで詳しく説明されています。詳細については、SYMBOLGENシステムオプションを参照してください。
前のページ|次のページ|ページの先頭へ