在 proc sql WHERE 子句中比较 SAS 中的两个日期变量
Comparing two date variables in SAS in a proc sql WHERE clause
我正在使用 SAS Enterprise guide 并想比较两个日期变量:
我的代码如下所示:
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
语句,我会得到以下数据:
但是,当我 运行 上述代码时,我收到以下错误消息:
ERROR: Expression using (=) has components that are of different data types.
ERROR: The following tables were not found in the contributing tables: max_date.
我在这里做错了什么?预先感谢您的帮助
如果您想基于聚合函数进行子集化,那么您需要使用 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;
我正在使用 SAS Enterprise guide 并想比较两个日期变量:
我的代码如下所示:
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
语句,我会得到以下数据:
但是,当我 运行 上述代码时,我收到以下错误消息:
ERROR: Expression using (=) has components that are of different data types.
ERROR: The following tables were not found in the contributing tables: max_date.
我在这里做错了什么?预先感谢您的帮助
如果您想基于聚合函数进行子集化,那么您需要使用 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;