2013-04-13 90 views
2

作爲SAS的絕對初學者,我很快遇到了日期格式化的問題。想用日期格式掙扎,想要YYYY-MM-DD

我有一個數據集包含三種日期類型的交易:BUSDATE,SPOTDATE,MATURITY。每筆交易都用兩條線表示,我想從第1行開始使用BUSDATE和SPOTDATE,但第2行使用MATURITY。

在原始組中,日期採用YYYY-MM-DD格式。

DATA masterdata; 
SET sourcedata(rename(BUSDATE=BUSDATE2 SPOTDATE=SPOTDATE2 MATURITY=MATURITY2)); 

BUSDATE=BUSDATE2; 
SPOTDATE=SPOTDATE2; 

IF TRANS_TYPE='Swap' THEN; 
MATURITY=SPOTDATE; 

RUN; 

問題是,這返回類似17169(我猜是從某個日期的天數)。

如何以YYYY-MM-DD格式輸出 - 或者這種方法是錯誤的;我應該首先將日期變量轉換爲SAS日期格式?

回答

9

如果您有有效的SAS日期,只需在您的DATA STEP中添加一條FORMAT聲明。

Format busdate spotdate maturity yymmdd10. ; 

SAS日期是數字變量。它們表示自1960年1月1日以來的天數。您使用FORMAT來顯示日期。

4

添加到CarolinaJay的答案,您通常希望將它們保留爲數字格式,因爲您可以使用它們進行數學運算(如「從日期X開始的天數」)。但是,如果由於某種原因,你需要一個字符變量,你可以這樣做:

date_As_char=put(datevar,YYMMDD10.); 

順便說一句,YYMMDD10實際上給你YYYY-MM-DD,因爲你要的。如果您想要一個不同的分隔符,請參見http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000589916.htm(YYMMDDxw。格式) - 如果您在最後一個D之後放置一個字母,對於某些字母,您將得到不同的分隔符。像YYMMDDn10一樣。給你沒有分隔符,或YYMMDDs10。給你斜線。 YYMMDDd10。給你破折號,就像忽略這封信一樣。這個概念也適用於MMDDYY格式,我想其他一些。