在proc sql WHERE子句中比较SAS中的两个日期变量

时间:2017-03-06 16:15:21

标签: sas proc-sql

我正在使用SAS Enterprise指南,并希望比较两个日期变量:

我的代码如下:

proc sql; 
    CREATE TABLE observations_last_month AS
    SELECT del_flag_1,
           gross_exposure_fx, 
           reporting_date format=date7., 
           max(reporting_date) AS max_date format=date7.
    FROM &dataIn. 
    WHERE reporting_date = max_date; 
quit; 

如果我在没有WHERE语句的情况下运行我的代码,我会得到以下数据:

enter image description here

但是,当我运行上面的代码时,我收到以下错误消息:

ERROR: Expression using (=) has components that are of different data types.
ERROR: The following tables were not found in the contributing tables: max_date.

我在这里做错了什么?先谢谢你的帮助

1 个答案:

答案 0 :(得分:3)

如果要基于聚合函数进行子集化,则需要使用HAVING而不是WHERE。如果要引用在查询中派生的变量,则需要使用CALCULATED关键字(或者只是重新计算它)。

proc sql; 
  CREATE TABLE observations_last_month AS
    SELECT del_flag_1
         , gross_exposure_fx
         , reporting_date format=date7.
         , max(reporting_date) AS max_date format=date7.
    FROM &dataIn. 
    HAVING reporting_date = CALCULATED max_date
  ; 
quit;