'01 -DIC-17 'のターゲット文字列を'01 \ 12 \ 17'に置き換えて、入力機能を使用してsas日付に変換します。出力は'01 \ 12 \ 'です。 '\ 17'を切り捨てます。tranwrdが正しく置き換えられず、ターゲット文字列が切り捨てられる
DATA SASは、次のとおりです。
data test;
input issueDate $10. lastDate $10.;
datalines;
05-DIC-16 04-ENE-17
05-DIC-16 04-ENE-17
05-DIC-16 04-ENE-17
05-DIC-16 20-ENE-17
05-DIC-16 20-ENE-17
05-DIC-16 04-ENE-17
05-DIC-16 20-ENE-17
05-DIC-16 04-ENE-17
05-DIC-16 20-ENE-17
;
run;
私は調整の月のテーブルを持っている:
DATA ADJUST_MONTH;
INPUT TARGET $ REPLACEMENT $;
DATALINES;
-ENE- /01/
-FEB- /02/
-MAR- /03/
-ABR- /04/
-MAY- /05/
-JUN- /06/
-JUL- /07/
-AGO- /08/
-SEP- /09/
-OCT- /10/
-NOV- /11/
-DIC- /12/
;
RUN;
実行コード:
proc sql;
update test
set issueDate = TRANWRD(issueDate,substr(issueDate,3,5),(select replacement from adjust_month where target eq substr(issueDate,3,5)));quit;
出力:IssueDate:'05 -DIC -16 'convert en IssueDate:'05/12 /'
助けてくれてありがとう。
ご協力ありがとうございます@Petr –
'trim()'関数を使用することをお勧めします。代わりに、 'trimn()'や 'cats()'が望ましいと考えてください。 'trim()'関数自体は多くの人が期待しているように動作せず、問題をデバッグするのが難しくなります。関数の完全な説明は次のとおりです。 "文字列から末尾の空白を削除し、文字列がない場合は空白を1つ返します。"通常、人々は前と後ろの空白の両方をトリミングしたいので、 'trim()'はそこでターゲットを逃します。さらに、空の文字列の代わりに単一のスペースを返すことは恐ろしい動作です。 –