KFINDW 関数

文字列内の単語の文字位置か、文字列内の単語の番号を返します。

カテゴリ:CAS
文字操作
制限事項:この関数にはI18Nレベル2のステータスが割り当てられ、DBCSデータ用に設計されています。ただし、最初の引数stringが1バイト文字の場合、KFINDW関数はSBCSデータを処理します。詳細については、SAS文字列関数の国際化の互換性を参照してください。

構文

KFINDW(string,word,<character-list>)
KFINDW(string,word,character-list,modifier(s),<start-position>)
KFINDW(string,word,character-list,start-position,<modifier(s)>)
KFINDW(string,word,start-position,<character-list,modifier(s)>)

必須引数

string

検索する文字列を指定する文字定数、変数または式です。

word

stringで検索する単語を指定する文字定数、変数または式です。

character-list

文字のリストを初期化する文字定数、変数または式です(省略可能)。

リスト中の文字は単語を区切るための区切り文字です(ただしmodifier引数にK修飾子を指定しない場合)。K修飾子を指定すると、このリストにないすべての文字が区切り文字となります。他の修飾子を使用して、このリストに文字をさらに追加できます。

start-position

検索を開始する位置を指定し、検索の方向を指定する整数値を持つ数値定数、変数または式です(省略可能)。

modifier

文字定数、変数または式を指定します。ここでは、空白以外の文字のそれぞれによってKFINDW関数のアクションが変更されます。

ヒントmodifier引数を使用する場合は、character-list引数の後に置く必要があります。

修飾子として次の文字を使用します。

空白無視されます。
aまたはA文字のリストに英文字が追加されます。
bまたはBstringが、左から右へではなく、右から左へスキャンされます。
cまたはC文字のリストにコントロール文字が追加されます。
dまたはD文字のリストに数字が追加されます。
eまたはE文字列内の指定された単語の文字位置を決定するかわりに、指定された単語が見つかるまでスキャンされる単語を数えます。単語の断片は数えられません。
fまたはF文字のリストにアンダースコアと英文字(VALIDVARNAME=V7を使用したSAS変数名内の有効な最初の文字)を追加します。
gまたはG文字のリストにグラフィック文字が追加されます。グラフィカル文字は、紙面に印刷するとイメージになる文字です。
hまたはH文字のリストに水平タブが追加されます。
iまたはI大文字と小文字を区別しません。
kまたはK文字のリストにないすべての文字が区切り文字として扱われます。Kを指定しなければ、文字のリストにあるすべての文字が区切り文字として扱われます。
lまたはL文字のリストに小文字が追加されます。
nまたはN文字のリストに数字、アンダースコアおよび英文字(VALIDVARNAME=V7を使用したSAS変数名内に表示可能な文字)を追加します。
oまたはOcharacter-listおよびmodifier引数が、KFINDW関数を呼び出すたびにではなく、1回だけ処理されます。DATAステップ(WHERE句を除く)またはSQLプロシジャでO修飾子を使用すると、character-listおよびmodifier引数が変更されないため、KFINDW関数をループで呼び出す際により速く実行させられます。
pまたはP文字のリストに句読点が追加されます。
qまたはQ引用符で囲まれた部分文字列内にある区切り文字が無視されます。string引数の値に一致しない引用符が含まれている場合は、左から右へのスキャンによって、右から左へのスキャンとは異なる単語が生成されます。
rまたはRword引数から先頭および末尾の区切り文字を削除します。
sまたはS文字のリストに空白文字(空白、水平タブ、垂直タブ、キャリッジリターン、ラインフィード、フォームフィード)を追加します。
tまたはTstring、wordおよびcharacter-list引数から末尾の空白が削除されます。
uまたはU文字のリストに大文字が追加されます。
wまたはW文字のリストに印刷可能(書き込み可能)文字が追加されます。
xまたはX文字のリストに16進数の文字が追加されます。

詳細

区切り文字

単語を区切るために使用されるいくつかの文字はいずれも区切り文字と呼ばれます。区切り文字は、character引数またはmodifier引数、あるいはその両方を使用して指定できます。Q修飾子を指定すると、引用符で囲まれた部分文字列内の文字は、区切り文字として扱われません。

単語

次の条件を両方とも満たす部分文字列を単語とします。

  • 左境界が、区切り文字または文字列の先頭である
  • 右境界が、区切り文字または文字列の末尾である。
    注: 単語に区切り文字を含めることができます。この場合、KFINDW関数は、単語は区切り文字を含まないと定義されているSCAN関数とは異なります。

文字列の検索

指定された単語と一致し、かつ単語の定義を満たす部分文字列を見つけられなかった場合、KFINDW関数は0の値を返します。

KFINDW関数が、指定された単語と一致し、かつ単語の定義を満たす部分文字列を見つけた場合、KFINDW関数によって返される値は、E修飾子が指定されているかどうかによって異なります。

  • E修飾子を指定すると、KFINDW関数は、指定された単語を検索している間にスキャンされた完全な単語の数を返します。start-positionで、単語の途中の位置が指定された場合、その単語は数に入りません。
  • E修飾子を指定しなければ、KFINDW関数は、見つかった部分文字列の文字位置を返します。

    start-position引数を指定すると、start-positionの絶対値によって、検索を開始する位置が指定されます。start-positionの符号によって、検索する方向が指定されます。

    startposの値

    アクション

    0より大きい

    start-positionから検索を開始し、右向きに検索していきます。start-positionが文字列の長さより大きい場合、KFINDW関数は0の値を返します。

    0より小さい

    位置start-positionから検索を開始し、左向きに検索していきます。start-positionが文字列の負の長さよりも小さい場合、文字列の末尾から検索を開始します。

    0に等しい

    KFINDW関数は0の値を返します。

    start-position引数やB修飾子を指定しない場合、KFINDW関数は、文字列の先頭から開始して左から右へ検索します。B修飾子を指定しても、start-position引数を使用しない場合、KFINDW関数は、文字列の末尾から開始して右から左へ検索します。

ASCII環境でのKFINDW関数の使用

引数を2つだけ指定してKFINDW関数を使用し、コンピューターでASCII文字を使用している場合、次のデフォルトの区切り記号が使用されます。

空白 ! $ % & ( ) * + , - . / ; < ^¦/ ; < ^ |

^文字が含まれないASCII環境では、KFINDW関数はかわりに~文字を使用します。

null引数の使用

KFINDW関数では、文字引数をnullに指定できます。null引数は長さがゼロの文字列として扱われます。数値引数はnullにできません。

SBCSおよびDBCSデータの処理

KFINDW関数はSBCSデータを処理するように設計されていますが、特定の条件でDBCSデータを処理できます。SBCSおよびDBCS処理の基準は次のとおりです。

  • stringがvarcharとして宣言され、かつマルチバイトデータを処理している場合、KFINDW関数はDBCSを処理します。
  • stringがvarcharとして宣言されていないか、または1バイトデータを処理している場合、KFINDW関数はSBCSを処理します。

例

例1

これらの例では、UTF-8エンコーディングを使用します。

data _null_;
  text='Renée Dupont';
  pos_of=kfindw(text,'Dupont'); /*1*/
  put pos_of=;
run;
  1. KFINDWは、SBCSスペースを区切り文字として使用して、テキストDupontの位置を指定します。

上記のステートメントは、次の結果を生成します。

pos_of=7

例2

次に、サポート代理ペア文字のサポート方法の例を示します。HTML形式で表示されます。この例では絵文字を使用します。

data _null_;
  text='Renée Dupont?😊';
  pos_of=kfindw(text,'😊','','p'); /*1*/
  put pos_of=;
run;
  1. KFINDWは、SBCSスペースと句読点を区切り文字として使用して絵文字の位置を指定します。

上記のステートメントは、次の結果を生成します。

pos_of=14

例3

この例では、漢字を使用します。

data _null_;
  text='SAS是全球最大的软件公司之一,sas 是全球商业智能和分析软件与服务领袖。';
  pos_of=kfindw(text, 'sas', '', 'sp'); /*1*/
  put pos_of = ;
run;
  1. KFINDWは、スペースと句読点を区切り文字として使用して、sasの位置を指定します。

上記のステートメントは、次の結果を生成します。

pos_of=17
最終更新: 2026年4月14日