2016-04-19 18 views
1

私はテーブルbのID列をINTEGER形式で持っています。 私はproc appendを使用していますが、テーブルdatabase.aw_1234をチェックすると、IDがdoubleまたはfloat形式になっていますが、どのように修正できますか?SAS proc append - 間違った形式の変数

data a (KEEP = ID ACC_NO PERIOD_DTE); 
infile "/root/dirs/files." dlm=";"; 

ID=_n_; 
format ID 8.; 
input ACC_NO_VAR PERIOD_DTE $10.; 

leading_zeros = 16 - length(ACC_NO_VAR); 
cat = repeat('0', leading_zeros); 
ACC_NO = catt(cat, ACC_NO_VAR); 
run; 

DATA b(KEEP = ID ACC_NO PERIOD_DTE); 
     RETAIN ID ACC_NO PERIOD_DTE; 
     SET a; 
RUN; 

proc delete data = database.aw_1234; 

proc append BASE=database.aw_1234. FORCE; 

答えて

2

SASには2つのタイプ、ストリングとダブルスしかありません。フォーマットは、変数をユーザに表示する方法に関するSASの指示にすぎません。あなたの番号は常に二重になっていました。

RDBMSでテーブルを作成している場合は、ログに "SASフォーマットが翻訳されていません"という行が表示されます。これは、RDBMSがフォーマットが何であるかを実際にはわからないことを意味します。そのため、SASはdoubleをdoubleとして書きます。

これを修正するには、RDBMSシステムでTYPE整数を使用してテーブルを作成します。次に、SASを使用してテーブルからレコードを削除し、そのテーブルに追加します。テーブルを削除して再作成しないでください。

はこのような何かにあなたのコードを変更し

:それは働いて

proc sql noprint; 
delete from database.aw_1234; 
quit; 

proc append base=database.aw_1234 data=b force; 
run; 
+0

、ありがとうございました! – aola

+0

これがあなたの問題を解決するならば、アップアップして受け入れてください。 – DomPazz

+1

マイナーニックピック - ベースSASには2種類しかありません.DS2は整数をサポートしています。 :) – Joe

関連する問題