Вычитание дат в Proc SQL/SAS

У меня есть блок кода 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.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я думаю, что 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;

Другие вопросы по теме