前のページ|次のページ

TRANWRD関数

文字列に含まれる特定の部分文字列をすべて置き換えます。

カテゴリ: 文字
制限事項: この関数は、I18Nレベル2に準拠しており、SBCS、DBCSおよびMBCS(UTF8)での使用目的で設計されています。

構文

必須引数

source

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

target

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

要件 targetの長さにはゼロより大きい値を指定する必要があります。

置換

targetを置き換える文字定数、変数または式を指定します。置換文字列の長さが0場合、TRANWRDではかわりに1つの空白を使用します。

詳細

返される変数の長さ

DATAステップで、まだ長さが割り当てられていない変数にTRANWRD関数から値が返される場合、その変数には200バイトの長さが割り当てられます。TRANWRDを呼び出す前に、LENGTHステートメントを使用して値の長さを変更できます。

基本

TRANWRD関数は、sourceの値を結果文字列にコピーする一方で、targetの値と等しいsource内のすべての重複しない部分文字列を検索します。これらの部分文字列は結果から削除され、replacementの値がその場所にコピーされます。TRANWRD関数では、target文字列またはreplacement文字列の末尾の空白は削除されません。

比較

TRANSTRN関数は、置換文字列にゼロの長さを使用できるという点でTRANWRD関数と異なります。TRANWRDでは、置換文字列の長さがゼロ場合はかわりに1つの空白を使用します。
TRANSLATE関数は、ユーザーが指定したすべての文字を別の文字に変換します。TRANSLATEは1回の呼び出しで複数の文字をスキャンできます。ただし、このスキャンを実行すると、TRANSLATEは文字列に含まれる個々のすべての文字を検索します。つまり、target文字列内の文字がsource文字列内に見つかった場合、その文字は対応する置換文字列内の文字に置き換えられます。
TRANWRD関数は、部分文字列をスキャンし、それらの部分文字列を2番目の部分文字列で置き換える点でTRANSLATEと異なります。

例1: 検出単語のすべての出現個所の置換

ステートメントとそれらの値による結果を次に示します。
   name=tranwrd(name, "Mrs.", "Ms.");
   name=tranwrd(name, "Miss", "Ms.");
   put name;
結果
Mrs.  Joan Smith
Ms.  Joan Smith
Miss Alice Cooper
Ms. Alice Cooper

例2: 検索文字列からの空白の削除

この例では、target文字列に空白が含まれるため、TRANWRD関数はsource文字列を置き換えません。
data list;
   input salelist $;
   length target $10 replacement $3;
   target='FISH';
   replacement='NIP';
   salelist=tranwrd(salelist, target, replacement);
   put salelist;
   datalines;
CATFISH
;
LENGTHステートメントはtargetを10の長さまで空白で埋め込むため、TRANWRD関数はSALELIST内で文字列'FISH 'を検索します。検索は失敗するため、次の行がSASログに書き込まれます。
CATFISH
targetまたはreplacement変数から末尾の空白を除外するには、TRIM関数を使用します。次の例では、targetにTRIM関数を使用します。
salelist=tranwrd(salelist,trim(target), replacement);
put salelist;
これで次の行がSASログに書き込まれるようになります。
CATNIP

例3: TRANWRD関数の第3引数の長さがゼロの場合

次の例では、第3引数replacementの長さがゼロの場合のTRANWRD関数の結果を示します。この場合、TRANWRDは1つの空白を使用します。DATAステップで2つの連続する引用符で構成される文字定数は、長さがゼロの文字列ではなく1つの空白を表します。この例では、string1の結果とstring2の結果は同じです。
data _null_;
   string1='*' || tranwrd('abcxabc', 'abc', trimn('')) || '*';
   put string1=;
   string2='*' || tranwrd('abcxabc', 'abc', '') || '*';
   put string2=;
run;
次の出力がログに書き込まれます。
string1=* x * string2=* x *

例4: カンマの繰り返しの削除

TRANWRD関数を使用して、テキスト内のカンマの繰り返しを削除して1つのカンマに置き換えることができます。次の例では、1つ目のTRANWRD関数で3つのカンマを1つのカンマに置き換え、2つ目のTRANWRD関数で末尾の2つのカンマをピリオドに置き換えます。
data _null_;
   mytxt='If you exercise your power to vote,,,then your opinion will be heard,,';
   newtext=tranwrd(mytxt, ',,,', ',');
   newtext2=tranwrd(newtext, ',,' , '.');
   put // mytxt= / newtext= / newtext2=;
run;
次の出力がログに書き込まれます。
mytxt=If you exercise your power to vote,,,then your opinion will be heard,, newtext=If you exercise your power to vote,then your opinion will be heard,, newtext2=If you exercise your power to vote,then your opinion will be heard.

関連項目:

関数:
前のページ|次のページ|ページの先頭へ