2017-07-27 71 views
0

我试图根据日期筛选器筛选数据。我表中的日期列在date9中。格式(30JUN2017)。要根据最大日期值减去6个月筛选销售额

我想通过从现有日期减去6个月来过滤日期列,这将是31DEC2017。

e.g:日期< 31DEC2017

能就如何做到这一点,我一直在使用的INTx功能等选项,以及试图无论如何建议。

感谢您的帮助。

+0

您可以减去一个日期从另一个直接得到他们之间的天数,并比较这180天(大约六个月)。如果要在代码中嵌入文字日期,请使用“31dec2017”。你试过了什么(精确),你得到了什么结果,为什么你认为结果是错误/不满意的? –

+0

'intnx'是这里使用的标准函数。当你尝试使用它时什么都不起作用?附:从2017年6月30日起的6个月是31DEC2016,而不是2017年 – Longfish

回答

0

当使用它们格式化值SAS处理日期,你应该将它们括在""d

问候, AJ,即在你的榜样应该是where date<"31DEC2017"d。如果您的日期以日期9格式存储为字符串,则可以将其设置为如下所示的日期:where input(date,date9.)<"31DEC2017"d

现在您的问题似乎与标题略有不同。根据后者,你想过滤max_date - 6个月,无论最大日期可能在你的数据集中。这可以这样做:

proc sql; 
    select * 
    from t 
    where intnx('month',date,6)<(select max(date) from t) 
    ; 
quit; 

但是,如果由于某种奇怪的原因,由“最大日”你的意思是当前的日期,上面的查询简直变成这样:

proc sql; 
    select * 
    from t 
    where intnx('month',date,6)<date() 
    ; 
quit;