早上好,
这是与此类似的问题(link),但我理想地寻找在任何地方都找不到的进一步解释。
最近,一位同事问我,为什么以下不平等会返回他们所做的结果:
%MACRO TEST ;
%IF '01JAN2009'D < '01MAR2015'D %THEN %PUT 1 is True ;
%ELSE %PUT 1 is False ;
%IF '01FEB2009'D < '01MAR2015'D %THEN %PUT 2 is True ;
%ELSE %PUT 2 is False ;
%IF '01SEP2009'D < '01MAR2015'D %THEN %PUT 3 is True ;
%ELSE %PUT 3 is False ;
%IF '01OCT2009'D < '01MAR2015'D %THEN %PUT 4 is True ;
%ELSE %PUT 4 is False ;
%MEND TEST ;
%TEST ;
运行TEST返回:
1 is True
2 is True
3 is False
4 is False
我知道%SYSEVALF()需要按预期解决这些不等式。但是,任何人都可以向我解释SAS在这四个实例中做了什么以及为什么两个返回TRUE值,而两个返回FALSE?
答案 0 :(得分:2)
You can't perform date-literal evaluations directly in SAS MACRO. In your examples above, the evaluations are being performed as character strings, hence '01SEP2009'D < '01MAR2015'D
being false as 01S
is greater than 01M
.
To compare date literals, you need to convert them to the underlying SAS date (i.e. a number).
%PUT %EVAL(%SYSEVALF('01sep2009'd) < %SYSEVALF('01mar2015'd)) ; /* log shows 1 (true) */
答案 1 :(得分:1)
将它们作为字符串进行比较。结果可以解释为J
和F
在M
之前,S
和O
之后。{/ p>