SAS SQL с «Like» и «% ___%» - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть набор данных, где я читаю на нескольких листах таблицы Excel. Одна из переменных (OrderDate) имеет формат "04-Aug-95", хотя, когда я печатаю, она выходит "04AUG1995".

Я пытаюсь написать код, который будет возвращать количество (количество) заказов в первом квартале 1995 года. Однако следующий код возвращает список всех OrderDate в наборе данных и счетчик 830 (который является общее количество рядов). Любая помощь с благодарностью:

proc sql;
select OrderDate, count(*) as Count
from Orders
where OrderDate LIKE '%JAN1995' OR '%FEB1995' OR '%MAR1995';
quit;

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Не путайте формат со значением.

Дата в Excel хранится как количество дней с 01.01.1970. Дата 04-Aug-95 будет иметь значение 34915 в Excel и будет просто отформатирована для отображения.

SAS похож в том, что значения даты и форматы даты сохраняются аналогично. Разница в том, что эпоха в SAS - 1 января 1960 года (на 10 лет раньше, чем в Excel).

Поскольку значения даты на самом деле являются числовыми значениями, на самом деле не имеет смысла использовать оператор like для них. Вы действительно хотите выбрать диапазон дат, используя предложение where. то есть. where OrderDate between '01jan1995'd and '31mar1995'd.

0 голосов
/ 05 ноября 2018

Попробуйте либо (в предложении where):

Put(OrderDate, Date9.) like '%JAN1995' OR Put(OrderDate, Date9.) like '%FEB1995' OR Put(OrderDate, Date9.) like '%MAR1995'

Или:

Where Case When Put(OrderDate, Date9.) like '%JAN1995' Then 1
           When Put(OrderDate, Date9.) like '%FEB1995' Then 1
           When Put(OrderDate, Date9.) like '%MAR1995' Then 1
           Else 0
      End
0 голосов
/ 05 ноября 2018

если ваша дата заказа хранится в дате, то вы могли бы что-то вроде ниже, а в первом квартале включить jan feb и март

 Proc sql;
  select OrderDate, count(*) as Count
   from Orders
 where qtr(OrderDate) = 1 and year(OrderDate)=1995;
quit;
...