首页 > 解决方案 > sas 中的日期格式在条件下与 proc sql 连接

问题描述

我有一个宏变量:%let date=201909 和表:

ID   Sending-date  item      
 1   15-jul-2019    A   
 2   23-sep-2019    B  
 3   12-sep-2019    A        
 4    1-jan-2019    B  
 5   5-feb-2019     B       

我想做的是验证是否在我的日期(9 月 9 日)和前两个月(8 月和 7 月)指示的月份中发送了一个项目,使用 proc sql 并且不添加新变量。
预期的 result_table 是这样的:

Month   Year  Number of items
9       2019        2
8       2019        0 
7       2019        1

最大的问题是如何转换表格中日期的格式,如我的宏变量日期。

标签: sqldatesassas-macroproc

解决方案


这是一种方法。

我使用 cutoff_date 而不是 date,因为它有助于更​​轻松地区分日期。使用 INTNX() 进行日期计算。在这种情况下,我将截止日期设置为 cutoff_month 的结束和两个月前的开始。您可能需要更清楚地定义它以满足您的需求,但这有效。

%let cutoff_date=201909; 

 proc sql;
 create table want as
 select month(sending_date) as Month, count(*) as num
 from have
 where sending_date between intnx('month', input("&cutoff_date.", yymmn6.), 0, 'e') and intnx('month', input("&cutoff_date.", yymmn6.), -2, 'b')
 group by calculated Month;
 quit;

推荐阅读