前のページ|次のページ

SUBSTRN関数

部分文字列を返します。長さがゼロの結果も返せます。

カテゴリ: 文字
制限事項: この関数は、I18Nレベル0準拠しており、SBCSデータ向けに設計されています。この関数をDBCSまたはMBCSデータの処理に使用しないでください。
ヒント: KSUBSTRは同等の機能を備えています。

構文

SUBSTRN(string, position <, length>)

必須引数

string

文字または数値の定数、変数または式を指定します。

stringが数値の場合、BEST32.形式の文字値に変換されます。先頭と末尾の空白は削除され、メッセージはSASログに送信されません。

position

部分文字列の最初の文字の位置を指定する整数です。

オプション引数

length

部分文字列の長さを指定する整数です。lengthを指定しない場合、SUBSTRN関数は文字列の指定した位置から最後までを含む部分文字列を返します。

詳細

返される変数の長さ

DATAステップで、まだ長さが割り当てられていない変数にSUBSTRN関数から値が返される場合、その変数には第1引数の長さが割り当てられます。

基本

次の情報はSUBSTRN関数についての説明です。
  • SUBSTRN関数は、positionまたはlengthのいずれかが欠損値を持つ場合、長さがゼロの文字列を返します。
  • 指定する位置が正でない場合、結果は最初に切り詰められ、結果の最初の文字は文字列の最初の文字となります。結果の長さはそれに応じて短縮されます。
  • 指定した長さが文字列の末尾を超える長さの場合、結果は最後に切り詰められ、結果の最後の文字は文字列の最後の文字となります。

マクロでのSUBSTRN関数の使用

%SYSFUNCマクロを使用してSUBSTRNを呼び出すと、マクロ処理で第1引数(string)が解決されて、引数が文字か数値かの判定が行われます。第1引数をマクロ式として評価させないようにするには、第1引数でマクロ引用機能のいずれかを使用します。

比較

次の表に、SUBSTRN関数とSUBSTR関数の比較を示します。
条件
関数
結果
positionの値が正でない
SUBSTRN
文字列の最初の文字で始まる結果を返します。
positionの値が正でない
SUBSTR
  • 第2引数が無効であることを示すメモがログに書き込まれます。
  • _ERROR_ =1を設定します。
  • 文字列の指定した位置から末尾までを含む部分文字列を返します。
lengthの値が正でない
SUBSTRN
長さがゼロの結果を返します。
lengthの値が正でない
SUBSTR
  • 第3引数が無効であることを示すメモがログに書き込まれます。
  • _ERROR_ =1を設定します。
  • 文字列の指定した位置から末尾までを含む部分文字列を返します。
指定した部分文字列が文字列の末尾を超える
SUBSTRN
結果を切り捨てます。
指定した部分文字列が文字列の末尾を超える
SUBSTR
  • 第3引数が無効であることを示すメモがログに書き込まれます。
  • _ERROR_ =1を設定します。
  • 文字列の指定した位置から末尾までを含む部分文字列を返します。

例1: SUBSTRN関数を使用した文字列の操作

次の例では、SUBSTRN関数を使用して文字列を操作する方法を示します。
data test;
   retain string "abcd";
   drop string;
   do Position=-1 to 6;
      do Length=max(-1,-position) to 7-position;
         Result=substrn(string, position, length);
         output;
      end;
   end;
   datalines;
abcd
;
proc print noobs data=test;
run;
SUBSTRN関数からの部分出力
SUBSTRN関数からの部分出力

例2: SUBSTR関数とSUBSTRN関数の比較

次の例では、第1引数が数値のときにSUBSTR関数とSUBSTRN関数を使用した結果を比較しています。
data _null_;
     substr_result="*" || substr(1234.5678,2,6) || "*";
     put substr_result=;
     substrn_result="*" || substrn(1234.5678,2,6)  || "*";
     put substrn_result=;
run;
次の出力がログに書き込まれます。
substr_result=* 1234* substrn_result=*234.56*

関連項目:

前のページ|次のページ|ページの先頭へ