我在表b中有ID列的格式为INTEGER。 我使用proc append,但当我检查表database.aw_1234我有双或浮动格式的ID,我该如何解决?
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;
答案 0 :(得分:2)
SAS只有2种类型,字符串和双打。格式只是SAS关于如何向用户显示变量的说明。所以你的号码总是翻倍。
如果您要在RDBMS中创建一个表,您可能会在日志中看到一条说明符号的注释" SAS格式未翻译"。这意味着RDBMS并不真正知道格式是什么,所以SAS只是将你的double写成double。
要解决此问题,请使用TYPE整数在RDBMS系统中创建表。然后使用SAS从表中删除记录并附加到该表中。不要删除并重新创建表格。
将您的代码更改为以下内容:
proc sql noprint;
delete from database.aw_1234;
quit;
proc append base=database.aw_1234 data=b force;
run;