2012-05-02 2 views
2

У меня есть инструкция sql для извлечения объекта даты. Он отлично работает в Postgres, но не sas. Запрос части выглядит следующим образом:эквивалент date_part function in sas

(case when date_part('month',run_date)::integer < 10 
    THEN '0'|| 
      date_part('month',run_date)::varchar(1)|| 
      date_part('year',run_date)::varchar(4) 
    else date_part('month',run_date)::varchar(2)||date_part('year',run_date)::varchar(4) 
    end) as our_date 

В системе sas нет функции date_part. Я попробовал функцию datepart. Но он не выполняет те же функции. Как я могу сделать эту инструкцию sql в sas? Благодарю.

ответ

10

DATEPART

data have; 
timestamp='01JAN2012:08:48'dt; 
run; 

proc sql; 
select datepart(timestamp) format=mmddyy10., 
timepart(timestamp) format=time., 
month(datepart(timestamp)), 
year(datepart(timestamp)) 
into :date , :time, :month, :year 
from have; 
quit; 

%put DATE: &date; 
%put TIME: &time; 
%put MONTH: &month; 
%put YEAR: &year; 
0

Я думаю, вы можете просто использовать

MONTH(run_date) 

и

YEAR(run_date) 
+0

Я попытался МЕСЯЦ (run_date) в Proc SQL, и она возвращает нулевое значение (». "в сасах). – swingfuture

+0

Думаю, я знаю, почему я получил нулевое значение. Поскольку run_date не является обычным форматом mmddyy10, но он показывает формат как DATETIME20. Думаю, мне нужно будет перенести это в первую очередь. – swingfuture

+3

Функции 'month()' и 'year()' предназначены для запуска против значения даты. Запуск их против значения datetime обычно приводит к нулевому значению из-за различий в способе хранения дат в сравнении с датами в SAS. –