请考虑以下事项:
data;
format x datetime19.;
x=datetime();
flag='FIRST';
do x=datetime() to x+10 by 1;
output;
flag='';
end;
proc sql noprint;
select x into : test1 from &syslast where flag='FIRST';
select max(x) into: test2 from &syslast;
%put now we see that &test1 is in a different format to &test2;
data _null_; set;
put x=; /* formatted */
call symput('test3',x);
call symput('test4',max(x,sum(x+1000)));
stop;
run;
%put The data step is more consistent - &test3 = &test4;
似乎与我不一致。为什么proc sql在这种情况下保留格式?这种行为是否记录在案?
答案 0 :(得分:3)
SAS无法知道如何格式化函数的结果。在这种情况下,您的max()
函数只是返回一个日期时间,但如果内部有嵌套函数或算术,该怎么办?因此,SAS仅将其视为全新变量,默认情况下不设置格式。如果您想对其应用相同的格式,可以将代码更改为:
select max(x) format=datetime19. into: test2 from &syslast;
答案 1 :(得分:2)
在您的示例中,MAX
函数会创建一个新列,在创建新列时,您需要指定所有列属性。因此,只需在select语句中添加FORMAT
子句:
proc sql noprint;
select x into : test1 from &syslast where flag='FIRST';
select max(x) format=datetime19. into: test2 from &syslast;
quit;
%put now we see that &test1 is in a different format to &test2;