前のページ|次のページ

COMPARE関数

2つの文字列を比較し、異なる文字が検出された場合には最も左にある文字の位置を返し、異なる文字が検出されない場合には0を返します。

カテゴリ: 文字
制限事項: この関数は、I18Nレベル0準拠しており、SBCSデータ向けに設計されています。この関数をDBCSまたはMBCSデータの処理に使用しないでください。
ヒント: この関数に相当するDBCS関数は、SAS各国語サポート(NLS):リファレンスガイドKCOMPAREです。DBCSの互換性も参照してください。

構文

必須引数

string–1

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

string–2

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

オプション引数

modifier

COMPARE関数のアクションを変更できる文字列を指定します。次の1つ以上の文字を有効な修飾子として使用できます。

iまたはI string–1およびstring–2の大文字と小文字を区別しません。
lまたはL 値を比較する前にstring–1およびstring–2の先頭の空白を削除します。
nまたはN 名前リテラルの引数から引用符を削除し、string–1およびstring–2の大文字と小文字を区別しません。名前リテラルは、引用符内の文字列として表される名前トークンで、大文字または小文字のnが後に続きます。名前リテラルにより、SASデータセットまたは変数名に使用できない特殊文字(空白文字を含む)を使用できるようになります。COMPAREで文字列が名前リテラルとして認識されるように、最初の文字を引用符にする必要があります。
:(コロン) string–1string–2の短い方の文字列の長さまたは1文字(どちらか大きい方)になるように長い方の文字列を切り捨てます。この修飾子を指定しない場合、長い方の文字列の長さと同じになるように短い方の文字列に空白が埋め込まれます。
ヒント
COMPAREは、修飾子として使用される空白を無視します。

詳細

基本

COMPARE関数では、修飾子の出現順序に意味があります。
  • "LN"は各文字列から先頭の空白を削除した後、名前リテラルから引用符を削除します。
  • "NL"は名前リテラルから引用符を削除した後、各文字列から先頭の空白を削除します。
COMPARE関数では、string–1string–2に違いがない場合はゼロ値を返します。引数が異なる場合、次のようになります。
  • 並べ替え順序でstring–1string–2よりも前にある場合は結果の符合が負になり、string–1string–2よりも後にある場合は正になります。
  • 結果の大きさは、文字列が異なる最も左側の文字の位置と等しくなります。

DBCSの互換性

この関数に相当するDBCS関数は、KCOMPARE関数 (SAS各国語サポート(NLS):リファレンスガイド)です。COMPARE関数とKCOMPARE関数には若干の違いがあります。両方の関数でさまざまな数の引数を使用できますが、第3引数の使用方法には互換性がありません。次の例では、構文の違いを示します。
COMPARE(string-1, string-2 <, modifier(s)>)
KCOMPARE(string-1 <, position <, count> >, string-2)

例1: 2つの文字列を比較するときの比較順序の理解

次の例では、COMPARE関数を使用して2つの文字列を比較します。
data test;
   infile datalines missover;
   input string1 $char8. string2 $char8. modifiers $char8.;
   result=compare(string1, string2, modifiers);
   datalines;
1234567812345678
123     abc
abc     abx
xyz     abcdef
aBc     abc
aBc     AbC     i
   abc  abc
   abc  abc     l
 abc       abx
 abc       abx  l 
ABC     'abc'n
ABC     'abc'n  n 
 '$12'n $12     n
 '$12'n $12     nl
 '$12'n $12     ln
;

proc print data=test;
run;
COMPARE関数を使用して2つの文字列を比較した結果
COMPARE関数を使用して2つの文字列を比較した結果

例2: COMPARE関数を使用した文字列の切り捨て

次の例では、:(コロン)修飾子を使用して文字列を切り捨てます。
data test2;
   pad1=compare('abc', 'abc            ');   
   pad2=compare('abc', 'abcdef         ');   
   truncate1=compare('abc', 'abcdef',':');  
   truncate2=compare('abcdef', 'abc',':');  
   blank=compare('', 'abc',          ':');   
run;

proc print data=test2 noobs;
run;
切り捨て修飾子を使用した結果
切り捨て修飾子を使用した結果

関連項目:

CALLルーチン:
前のページ|次のページ|ページの先頭へ