DBCS(Double Byte Character Set:2バイト文字)に対応した関数

[OS] ALL
[リリース] ALL
[キーワード] BASE, DBCS, FUNCTION

[質問]

下記のSASプログラムを実行すると、Cの値は3バイト目の「3」になります。2文字目の「2」を求めるにはどのようにすればよいでしょうか。


DATA _NULL_;
  a='日本語';
  b='本';
  c=INDEX(a,b);
  put c=;
RUN;

[回答]

INDEX関数はDBCS(Double Byte Character Set:2バイト文字)に対応していないため、上記の結果になります。
DBCSに対応したKINDEX関数をご利用ください。

DBCSに対応した関数は、同様の機能を持つSBCS(Single Byte Character Set:1バイト文字)用の関数名の先頭に「K」がついたもので、下記のような種類があります。

SAS関数:DBCS関数(SASシステムヘルプ日本語版より引用)

関数と構文機能

KCOMPARE(source, <pos, <count,>> findstr)
文字列の比較結果を返す

KCOMPRESS(source <,characters-to-remove>)
文字列から特定の文字を削除する

KCOUNT(source)
文字列内の2バイト文字の数を返す

KINDEX(source, excerpt)
文字式の文字列を検索する

KINDEXC(source, excerpt-1<, ...excerpt-n>)
文字式から特定の文字を検索する

KLEFT(argument)
不要な前置DBCSブランクとSO/SIを削除して、SAS文字式を左揃えにする

KLENGTH(argument)
引数の長さを返す

KLOWCASE(argument)
引数のすべての1バイト文字を小文字に変換する

KREVERSE(argument)
文字式を反転する

KRIGHT(argument)
後置DBCSブランクとSO/SIを削除して、文字式を右揃えにする

KSCAN(argument, n<, delimiters>)
文字式から一定の語を選択する

KSTRCAT(argument-1, argument-2<, ...argument-n>)
2つ以上の文字列を連結する

KSUBSTR(argument, position<, n>)
引数から任意のDBCS部分文字列を抽出する

KSUBSTRB(argument, position<, n>)
バイト位置に基づく引数から任意のDBCS部分文字列を抽出する

KTRANSLATE(source, to-1, from-1<, ...to-n, from-n>)
文字式に含まれる特定の文字を置換する

KTRIM(argument)
後置DBCSブランクとSO/SIを文字式から削除する

KTRUNCATE(number, length)
指定した長さに数値を切り捨てる

KUPCASE(argument)
引数のすべての1バイト文字を大文字に変換する

KUPDATE(argument, position, n<, characters-to-replace>)
KUPDATE(argument, position<, n>, characters-to-replace)
文字値の内容を挿入、削除、置換する

KUPDATEB(argument, position, n<, characters-to-replace>)
KUPDATEB(argument, position<, n>, characters-to-replace)
バイト単位に基づく文字値の内容を挿入、削除、置換する

KVERIFY(source, excerpt-1<, ...excerpt-n>)
式に固有な最初の文字の位置を返す