TRANSTRN関数
文字列に含まれる特定の部分文字列をすべて置き換えるか削除します。
構文
必須引数
target
source内で検索する文字定数、変数または式を指定します。
要件 |
targetの長さにはゼロより大きい値を指定する必要があります。
|
置換
targetを置き換える文字定数、変数または式を指定します。
詳細
返される変数の長さ
DATAステップで、まだ長さが割り当てられていない変数にTRANSTRN関数から値が返される場合、その変数には200バイトの長さが割り当てられます。TRANSTRNを呼び出す前に、LENGTHステートメントを使用して値の長さを変更できます。
基本
TRANSTRN関数は、文字列に含まれる特定の部分文字列をすべて置き換えるか削除します。TRANSTRN関数では、target文字列とreplacement文字列の末尾の空白は削除されません。すべてのtargetを削除するには、replacementにTRIMN("")を指定します。
比較
TRANSTRN関数は、置換文字列にゼロの長さを使用できるという点でTRANWRD関数と異なります。TRANWRDでは、置換文字列の長さがゼロ場合はかわりに1つの空白を使用します。
TRANSLATE関数は、ユーザーが指定したすべての文字を別の文字に変換します。TRANSLATEは1回の呼び出しで複数の文字をスキャンできます。ただし、このスキャンを実行すると、TRANSLATEは文字列に含まれる個々のすべての文字を検索します。つまり、target文字列内の文字がsource文字列内に見つかった場合、その文字は対応する置換文字列内の文字に置き換えられます。
TRANSTRN関数は、部分文字列をスキャンし、それらの部分文字列を2番目の部分文字列で置き換える点でTRANSLATEと異なります。
例
例1: 検出単語のすべての出現個所の置換
ステートメントとそれらの値による結果を次に示します。
name=transtrn(name, "Mrs.", "Ms.");
name=transtrn(name, "Miss", "Ms.");
put name;
例2: 検索文字列からのブランクの削除
この例では、target文字列に空白が含まれるため、TRANSTRN関数はsource文字列を置き換えません。
data list;
input salelist $;
length target $10 replacement $3;
target='FISH';
replacement='NIP';
salelist=transtrn(salelist, target, replacement);
put salelist;
datalines;
CATFISH
;
LENGTHステートメントは
targetを10の長さまで空白で埋め込むため、TRANSTRN関数はSALELIST内で文字列
'FISH '
を検索します。検索は失敗するため、次の行がSASログに書き込まれます。
CATFISH
targetまたはreplacement変数から末尾の空白を除外するには、TRIM関数を使用します。次の例では、
targetにTRIM関数を使用します。
salelist=transtrn(salelist,trim(target), replacement);
put salelist;
これで次の行がSASログに書き込まれるようになります。
CATNIP
例3: TRANSTRN関数の第3引数の長さがゼロの場合
次の例では、第3引数replacementの長さがゼロの場合のTRANSTRN関数の結果を示します。DATAステップで2つの引用符で構成される文字定数は、長さがゼロの文字列ではなく1つの空白を表します。次の例では、string1の結果はstring2の結果とは異なります。
data _null_;
string1='*' || transtrn('abcxabc', 'abc', trimn('')) || '*';
put string1=;
string2='*' || transtrn('abcxabc', 'abc', '') || '*';
put string2=;
run;
次の出力がログに書き込まれます。
string1=*x* string2=* x *