2012-05-02 41 views
2

我有一個sql語句來提取日期對象。它在Postgres中運行良好,但不是sas。部分查詢是這樣的:sas中的等價date_part函數

(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

我試圖PROC SQL中的MONTH(run_date),並返回空值(」。 「在薩斯)。 – swingfuture

+0

我想我知道我爲什麼得到空值。因爲run_date不是常規的mmddyy10格式,但它顯示格式爲DATETIME20。猜猜我必須先將其轉換。 – swingfuture

+3

'month()'和'year()'函數被設計爲針對日期值運行。按照日期時間值運行它們通常會導致空值,因爲存儲日期的方式與SAS中的日期時間相比存在差異。 –