У меня есть блок кода Proc SQL, работающий в SAS Enterprise Guide. Мне нужно найти количество дней между двумя датами
proc sql;
select col_A,col_B,col_C, (put (date(),yymmdd10.) - col_C) as age_bucket
from DB2.Table_A;
quit;
col_C — это дата в формате «ГГГГ-ММ-ДД» (например, 2022-05-02). Я вычитаю col_C из сегодняшней даты и хочу получить общее количество дней между ними как age_bucket. Я получаю следующую ошибку.
ERROR: Expression using subtraction (-) requires numeric types.
Как мне это сделать? Table_A взята из базы данных DB2.
Я думаю, что DB2 поддерживает функцию DAYS_BETWEEN(), которая даст вам количество дней между двумя аргументами даты. https://www.db2tutorial.com/db2-дата-функции/
Использование функции PUT() для преобразования текущей даты в строку символов сделает невозможным выполнение арифметических операций с результатом.
Если COL_C имеет значение DATE, не имеет значения, как отображается значение (форматы просто влияют на то, как отображаются значения). Значение DATE — это просто количество дней с 1960 года. Вам нужно всего лишь вычесть два числа, чтобы вычислить разницу в днях.
(date() - col_C) as age_bucket
Если COL_C имеет значение DATETIME (количество секунд с 1960 года), сначала преобразуйте его в значение DATE.
(date() - datepart(col_C)) as age_bucket
Если COL_C представляет собой строку символов в формате ГГГГ-ММ-ДД, используйте функцию INPUT() с информацией ГГММДД для преобразования строки в значение даты.
(date() - input(col_C,yymmdd10.)) as age_bucket
Используйте функцию YRDIF, чтобы получить возраст в годах. Вычитание дат даст ваш возраст в днях.
Обе даты должны быть датами SAS, числовыми в формате даты.
proc sql;
select col_A,
col_B,
col_C,
floor(YRDIF(input(col_C, yymmdd10.), today(),"AGE")) as age_bucket
from DB2.Table_A;
quit;