我经常使用day
函数来控制查询中的日期参数。
根据下面的数据步骤,我可以根据当月的日期是&bom
到每个月的8日来调用当月的开头le
(在这种情况下我们希望&bom
设置为上个月的第1天),否则将&bom
设置为当月的第1天。
data _null_;
call symput('current'," '" || put(intnx('day',today(),0),yymmdd10.) || "'");
call symput('bom'," '" || put(intnx('month',today(),0,'b'),yymmdd10.) || "'");
call symput('end'," '" || put(intnx('day',today(),-8,'e'),yymmdd10.) || "'");
if day(today()) le 8 then do;
call symput('bom'," '" || put(intnx('month',today(),-1,'b'),yymmdd10.) || "'");
end;
run;
%put &bom &end ¤t;
262 %put &bom &end ¤t;
'2015-12-01' '2015-12-30' '2016-01-07'
将此逻辑应用于“季度类型”条件似乎很简单。因此 - 如果该季度的(连续)日期在该季度的最后一天之后少于8天,则您的&boq
(季度开始)值将是最后一个季度的第一天'2015-10-01'
,但qtr
函数根据季度1-4
创建值,而不是表示季度连续日的“数字”。
是否有一个可以按季度运行的天数的功能,就像月度运行的day
功能一样?
我最初的尝试是包装功能......没有成功......
qtr_day = day(qtr(today()));
答案 0 :(得分:4)
诀窍是使用SAS日期,因为SAS日期是数字,所以您可以找到日期边界并根据需要添加/减去8来增加。或者您可以在日期上嵌套intnx函数。要将日期显示为四分之一,请使用四分之一格式来显示日期。
date_qtr_boundary = intnx('quarter', today(), 0, 'e') + 8;
然后你可以将你的日期与边界值而不是数字8进行比较。我很难完全遵循你想要确定的内容,但是如果你发布一些样本数据和预期输出,我(或者别人)可以提供更多细节。