文字列からn番目の単語の位置と長さを返します。
| カテゴリ: | 文字 |
| 操作: | %SYSCALLマクロステートメントで呼び出されると、CALL SCANの引数から引用符が削除されます。詳細については、CALLルーチンと%SYSCALLマクロステートメントを使用するを参照してください。 |
CALL SCANルーチンが文字列内で選択する単語の番号を指定する整数値を使用するゼロ以外の数値の定数、変数または式です。たとえば、1の値は1番目の単語、2の値は2番目の単語を示します。次のルールが適用されます。
単語の位置を返す数値変数を指定します。countが文字列内の単語数を超えると、positionで返される値はゼロになります。countがゼロまたは欠損している場合、positionで返される値は欠損します。
単語の長さを返す数値変数を指定します。countが文字列内の単語数を超えると、lengthで返される値はゼロになります。countがゼロまたは欠損している場合、lengthで返される値は欠損します。
文字定数、変数または式を指定します。
文字のリストを初期化する任意の文字定数、変数または式を指定します。このリストは、単語を区切る区切り文字として使用する文字を決定します。次のルールが適用されます。
| ヒント | その他の修飾子を使用してcharacter-listにさらに文字を追加できます。 |
空白以外の各文字によってCALL SCANルーチンのアクションが変更される、文字定数、変数または式を指定します。空白は無視されます。次の文字を修飾子として使用できます。
| aまたはA | 文字のリストにアルファベット文字を追加します。 |
| bまたはB | count引数の符号に関係なく、左から右ではなく、右から左へ逆行スキャンします。 |
| cまたはC | 文字のリストに制御文字を追加します。 |
| dまたはD | 文字のリストに数字を追加します。 |
| fまたはF | 文字のリストにアンダースコアと英文字(VALIDVARNAME=V7を使用したSAS変数名内の有効な最初の文字)を追加します。 |
| gまたはG | グラフィック文字を文字リストに追加します。グラフィカル文字は、紙面に印刷するとイメージになる文字です。 |
| hまたはH | 文字のリストに水平タブを追加します。 |
| iまたはI | 大文字か小文字かは無視します。 |
| kまたはK | 文字のリストに含まれていないすべての文字を区切り文字として扱うようにします。つまり、Kを指定すると、文字リストに含まれている文字が、区切り文字として省略されることなく、戻り値内に保持されます。Kを指定しない場合、文字のリストに含まれているすべての文字が区切り文字として扱われます。 |
| lまたはL | 文字のリストに小文字を追加します。 |
| mまたはM | 複数の連続する区切り文字、およびstringstring引数の先頭または末尾の区切り文字が、長さがゼロの単語を参照するように指定します。M修飾子を指定しない場合、複数の連続する区切り文字は1つの区切り文字として扱われ、string引数の先頭または末尾の区切り文字は無視されます。 |
| nまたはN | 文字のリストに数字、アンダースコアおよび英文字(VALIDVARNAME=V7を使用したSAS変数名内に表示可能な文字)を追加します。 |
| oまたはO | character-list引数およびmodifier引数を、CALL SCANルーチンを呼び出すごとに処理するのではなく、1回だけ処理します。DATAステップでO修飾子を使用すると、character-list引数およびmodifier引数が変更されないループ内でCALL SCANを呼び出すとき、より迅速に実行できます。O修飾子はSASコード内のCALL SCANルーチンの各インスタンスに個別に適用され、CALL SCANルーチンのすべてのインスタンスで同じ区切り文字と修飾子が使用されるようにはなりません。 |
| pまたはP | 文字のリストに句読点を追加します。 |
| qまたはQ | 引用符で囲まれた部分文字列内の区切り文字を無視します。string引数の値に、一致しない引用符が含まれている場合、左から右へのスキャンでは、右から左へのスキャンとは異なる単語が生成されます。 |
| sまたはS | 文字のリストに空白文字(空白、水平タブ、垂直タブ、キャリッジリターン、ラインフィード、フォームフィード)を追加します。 |
| tまたはT | string引数およびcharacter-list引数から末尾の空白を取り除きます。両方の文字引数ではなく一方のみから末尾の空白を削除する場合は、CALL SCANルーチンでT修飾子を使用するかわりに、TRIM関数を使用します。 |
| uまたはU | 文字のリストに大文字を追加します。 |
| wまたはW | 文字のリストに印刷可能(書き込み可能)な文字を追加します。 |
| xまたはX | 文字のリストに16進文字を追加します。 |
| ヒント | modifier引数が文字定数の場合は引用符で囲みます。一組の引用符で複数の修飾子を指定します。引数modifierには、文字変数や文字式も指定できます。 |
data artists;
input string $60.;
drop string;
do i=1 to 99;
call scan(string, i, position, length);
if not position then leave;
Name=substrn(string, position, length);
output;
end;
datalines;
Picasso Toulouse-Lautrec Turner "Van Gogh" Velazquez
;
proc print data=artists;
run;data firstlast; input String $60.; call scan(string, 1, First_Pos, First_Length); First_Word=substrn(string, First_Pos, First_Length); call scan(string, –1, Last_Pos, Last_Length); Last_Word=substrn(string, Last_Pos, Last_Length); datalines4; Jack and Jill & Bob & Carol & Ted & Alice & Leonardo ! $ % & ( ) * + , - . / ; ;;;; proc print data=firstlast; var First: Last:; run;
data all;
length word $20;
drop string;
string=' The quick brown fox jumps over the lazy dog. ';
do until(position <= 0);
count+1;
call scan(string, count, position, length);
word=substrn(string, position, length);
output;
end;
run;
proc print data=all noobs;
var count position length word;
run;data comma;
length word $30;
string=',leading, trailing,and multiple,,delimiters, ,';
do until(position <= 0);
count + 1;
call scan(string, count, position, length, ', ', 'mo');
word=substrn(string, position, length);
output;
end;
run;
proc print data=comma noobs;
var count position length word;
run; data test;
length word word_r $30;
string='He said, "She said, ""No!""", not "Yes!"';
do until(position <= 0);
count + 1;
call scan(string, count, position, length, ', ', 'oq');
word=substrn(string, position, length);
output;
end;
run;
proc print data=test noobs;
var count position length word;
run;data digits;
length digits $20;
string='Call (800) 555–1234 now!';
do until(position <= 0);
count+1;
call scan(string, count, position, length, , 'dko');
digits=substrn(string, position, length);
output;
end;
run;
proc print data=digits noobs;
var count position length digits;
run;