Функциональная программа SAS today()

#date #sas

Вопрос:

Итак, этот код от предыдущего человека в моей роли (не от меня самого), и я пытаюсь понять, является ли он совершенно бесполезным или нет. Все еще довольно новичок в SAS, но мое понимание функции Today() заключается в том, что она показывает количество дней с 1/1/1960. Это первое утверждение и серия if/elses все зависит от того, возвращает ли функция today() число меньше 8, чего, безусловно, никогда не должно произойти. Я что-то упускаю или этот фрагмент кода ничего не делает? (Я, конечно, изменил код и забыл удалить его раньше, чтобы они не были сумасшедшими, но я просто запутался здесь).

даты данных;

 rundate=mdy(1,1,year(today()));

if day(today()) >= 8 then do;
    enddate=today()-3;
end;
else do;
    if month(today()) ~= 1 then do;
        if (month(today())-1) in (1,3,5,7,8,10,12) then do;
            enddate=mdy(month(today())-1,31,year(today()));
        end;
        else if (month(today())-1) in (4,6,9,11) then do;
            enddate=mdy(month(today())-1,30,year(today()));
        end;
        else do;
            if year(today()) not in (2020,2024,2028,2032) then enddate=mdy(2,28,year(today()));
            else enddate=mdy(2,29,year(today()));
        end;
    end;

    else do;
        enddate=mdy(12,31,year(today())-1);
    end;
end;
 

Ответ №1:

Ты пропускаешь какую-то функцию!

 if day(today()) >= 8 then do;
 

day() возвращает день месяца — число от 1 до 31.

Таким образом, эта первая часть выполняется только в том случае, если вы находитесь не в первую неделю месяца — например, в финансах это обычное дело. Если это не первая неделя месяца, то дата окончания периода-3 дня назад. Если это первая неделя месяца, то действуйте по более сложной логике.