たとえば「abc def」→「Abc def」のような変換です。
前提条件
・ 最初の1バイト目はアルファベットである事。
・ 対象変数は半角の英数記号のみである事。
data DT1;
length VAL $20.; VAL="proc print"; output; VAL="data step"; output; run;
|
data DT2; length VAL2 VAL3 $20.; set DT1;
* ① SUBSTR関数を使う ;
VAL2 = upcase(first(VAL)) || substr(VAL,2); * ② 正規表現を使う ; VAL3 = prxchange('s/(^[a-z])/\U$1/', 1, VAL); run;
|
① SUBSTR関数を使う方法
FIRST関数は1バイト目を抜き出す関数
つまり1バイト目を抜き出して大文字にしたものと、2バイト目以降の文字を結合しています。
② 正規表現を使う方法
PRXCHANGE関数で正規表現による置換をしてます。
「prxchange('s/(^[a-z])/\U$1/', 1, VAL)」
「(^[a-z])」は先頭の文字がa~zのいずれかである場合、、という意味。
「\U$1」は上記を大文字に変換しています。
ご存じだと思われますが、PROPCASEが楽でした。
返信削除コメントありがとうございます!
削除今回の場合、例えば「data step」の文字を「Data step」としたかったのですが、
PROPCASEですと、最初の1バイト目だけ大文字というのが出来ないようでして。。