SAS INTCK та INTNX Дві важливі функції для обчислення інтервалів між датами у SAS
Нова рубрика Переклад невеликих навчальних посібників SAS Tips, які публікують експерти SAS в офіційних блогах англійською. Є цікаві та корисні уроки
Почнемо з туторіалу за функціями INTCK та INTNX. Урок побудований на прикладі президентів США, ну так і писав американський експерт Rick Wicklin:)
INTCK та INTNX: Дві важливі функції для обчислення інтервалів між датами в SAS
Минулого тижня я продемонстрував тимчасову шкалу для президентів США. Число президентів, що живуть, постійно протягом тимчасового інтервалу між датами інавгурації і датами смерті президентів. Дані були взяті з таблиці у Вікіпедії (наведена нижче), де показано кількість років і днів між подіями. У цій статті описано, як використовувати функції INTCK та INTNX у SAS для обчислення часу між подіями у цьому форматі. Зокрема, я використовую два маловідомі варіанти цих функцій, які полегшують це завдання
Інтервали між датами
Якщо ви обчислюєте інтервал між двома датами (датою початку та датою закінчення), є дві функції SAS, про які ви обов'язково маєте знати.
- Функція INTCK повертає кількість одиниць часу між двома датами. Як одиниця часу можна вибрати роки, місяці, тижні, дні та багато іншого. Наприклад, у своїй попередній статті я використовував функцію INTCK визначення кількості днів між двома датами.
- Функція INTNX повертає дату SAS, яка віддалена від зазначеної дати на вказану кількість одиниць часу. Наприклад, функцію INTNX можна використовувати для обчислення дати, яка знаходиться на 308 днів пізніше вказаної дати.
Дві ці функції доповнюють одна одну: одна обчислює різницю між двома датами, а інша дозволяє додаватиодиниці часу значення дати.
Параметри для підрахунку роковин
Обидві функції підтримують багато параметрів. Якщо ви хочете розрахувати кількість повних річних інтервалів, а не просто кількість переддень нового року, можна скористатися параметрами цих функцій (починаючи з SAS 9.2) для підрахунку кількості річниці між двома датами та обчислення дати майбутньої річниці. Ви можете використовувати параметр "CONTINUOUS" для функції INTCK і "SAME" для функції INTNX наступним чином:
Параметр "CONTINUOUS" для функції INTCK дозволяє підрахувати кількість річниці однієї дати, що відбулися до настання другої дати. Наприклад, вираз
Years = intck('year', '30APR1789'd, '04MAR1797'd, 'continuous');
Anniv = intnx('year', '30APR1789'd, 7, 'same');
повертає 7-му річницю дати 30APR1789. Іншими словами, він повертає 30APR1796.
Алгоритм обчислення кількості років та днів між подіями
Наступний алгоритм обчислює кількість років і днів між датами SAS:
- Використовуйте функцію INTCK з параметром "CONTINUOUS", щоб визначити кількість повних років між двома датами.
- Використовуйте функцію INTNX, щоб знайти третю дату (дату річниці), яка збігається з початковою датою за місяцем та днем, але відбувається за рік до кінцевої дати. (Річниця для високосних днів – це 28FEB або 29FEB, залежно від того, чи відбувається річниця у високосному році.)
- Використовуйте функцію INTCK для обчислення кількості днів між датою річниці та датою закінчення.
На наступному етапі обчислюємо часовий інтервал у роках та днях між датами інавгурації та датами смерті для кількох перших президентів США. Отримані змінні Year та Day містять ту саму інформацію, щота у таблиці Вікіпедії.
Висновки та посилання
Таким чином, функції INTCK та INTNX незамінні для обчислення інтервалів між датами. У цій статті я наголосив на важливості двох маловідомих параметрів цих функцій: параметра "CONTINUOUS" в INTCK і параметра "SAME" в INTNX. Використовуючи ці параметри, ви можете розрахувати кількість річниць між датами та останніми роковинами. Таким чином, ви можете розрахувати кількість років та днів між двома датами.
Про визначення дат та інтервалів між датами в SAS написано безліч статей. Я рекомендую наступні статті:
І нарешті, чи знаєте ви, що означають абревіатури INTCK та INTNX? Очевидно, що частина "INT" відноситься до слова INTervals ("інтервали"). На загальну думку, "INTCK" означає "Interval Check" (перевірка інтервалу), а "INTNX" - "Interval Next" (наступний інтервал).