TRANWRD関数
文字列に含まれる特定の部分文字列をすべて置き換えます。
カテゴリ: |
文字 |
制限事項: |
この関数は、I18Nレベル2に準拠しており、SBCS、DBCSおよびMBCS(UTF8)での使用目的で設計されています。 |
構文
必須引数
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;
例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.