当SAS中的代码SQL时,我遇到了一个非常令人困惑的问题。我的代码是:
proc sql noprint;
select VDte into :vdate
from test1;
quit;
proc sql;
create table test3 as
select *, cdate>=&vdate. as index
from test2;
quit;
我发现所有index = 1。应该有一些index=0
和一些index=1
。当我使用数字而不是宏变量vdate
时,例如。 17685(02Jun2008)而不是&vdate.
,它有效!
我还检查了VDte。它的类型是数字,格式是ddmmyy10 ..也就是说VDte是存储在SAS中的数字!但是当把它交给& vdate。时,有一些问题!!
有人可以帮我理解这种情况吗?
谢谢, 安德烈
答案 0 :(得分:3)
如果您的VDte具有SAS日期格式,则需要"清除"在将其值存储到宏变量之前:
proc sql;
select VDte format=8.
into :vdate
from test1;
quit;
然后你的比较应该可以正常工作。
请注意,您也可以使用date9。用于创建宏变量的格式,然后在第二个查询中使用cdate>="&vdate"d
。