Я часто использую функцию day
для управления параметрами даты в запросах.Функции даты SAS: Квартальная эквивалентная функция дня
С шагом данных ниже я могу назвать начало текущего месяца &bom
в зависимости от того или нет дня месяца le
до 8 числа каждого месяца (в котором тот случае, мы хотим &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
(начало квартала) будет первым днем квартала LAST '2015-10-01'
, но функция qtr
создает значения на основе на квартал 1-4
, а не «число», представляющее собой последовательный день квартала.
Есть функция, которая может работать с количеством дней на ежеквартальном уровне, подобно функции day
, работающей на ежемесячном уровне?
Моя первая попытка была оберточной функции ... никакого успеха ...
qtr_day = day(qtr(today()));
Я думаю, что вы понимаете мою концепцию. Позволяет использовать сегодняшнюю дату (8-е), чтобы уточнить/подтвердить. Поскольку это <= до 8-го числа квартала, мне нужно создать mac. вар. & boq для представления первого дня предыдущего квартала ('2015-10-01'), но если я буду выполнять работу завтра (9-е), мне нужно ее создать mac. вар. & boq в первый день текущего квартала ('2016-01-01'). Я считаю, что вы дали мне решение, уточнив дату, когда произошла граница четверти (начало или конец), и отключение от этого: правильно? – SMW
'DATA _NULL_; CALL SYMPUT ('BOQ', '' '|| PUT (INTNX (' QUARTER ', TODAY(), 0,' B '), YYMMDD10.) || "'"); IF TODAY() <= INTNX ('QUARTER', TODAY(), 0, 'E') + 8 THEN DO; \t CALL SYMPUT ('BOQ', '' '|| PUT (INTNX (' QUARTER ', TODAY(), - 1,' B '), YYMMDD10.) || "'"); END; RUN; % PUT &BOQ; 'Казалось, что это трюк (производящий значение« 2015-10-01 »). – SMW
Рад, что у вас есть! – Reeza