2017-10-17 3 views
1

'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 /'

助けてくれてありがとう。

答えて

0

コード内ですべての変換を行う必要はありません。関連する言語の日付情報を使用して、データを直接読むことができます。あなたのケースではスペイン語ですので、espdfde9.インフォーメイトはソースデータを日付(input関数を使用)として読み込みます。

通常、日付が文字の代わりに数字として保存される方が一般的であるため、既存の列を更新するのではなく、これらの日付を格納するために余分な列を作成します。しかしそれはあなたの選択です。

このインフォーマットを使用するには、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 want; 
set test; 
issuedate_new = input(issuedate, espdfde9.); 
lastdate_new = input(lastdate, espdfde9.); 
format issuedate_new lastdate_new date9.; 
run; 
1

replacementカラムには末尾の空白が含まれています。 Trimまたは同様の機能が役立ちます。たとえば、ネストされた選択をtrim((select replacement from adjust_month where target eq substr(issueDate,3,5)))に置き換えます。

+0

ご協力ありがとうございます@Petr –

+0

'trim()'関数を使用することをお勧めします。代わりに、 'trimn()'や 'cats()'が望ましいと考えてください。 'trim()'関数自体は多くの人が期待しているように動作せず、問題をデバッグするのが難しくなります。関数の完全な説明は次のとおりです。 "文字列から末尾の空白を削除し、文字列がない場合は空白を1つ返します。"通常、人々は前と後ろの空白の両方をトリミングしたいので、 'trim()'はそこでターゲットを逃します。さらに、空の文字列の代わりに単一のスペースを返すことは恐ろしい動作です。 –

関連する問題