2016-11-14 39 views
1

在下面的SAS代碼..在更改日期類型在SAS輸出表

data temp2; 
input id 1 @3 date mmddyy11.; 
cards; 
1 11/12/1980 
2 10/20/1996 
3 12/21/1999 
; 
run; 

proc print data = temp2; 
format date date9.; 
run; 

Rsults:

id   date 

1 12NOV1980 
2 20OCT1996 
3 21DEC1999 

考慮以下輸出和日期類型:

data temp3a; 
set temp2; 
two_days = intnx('day',date,2); 
run; 
proc print data = temp3a noobs; 
format date two_days date9.; 
run; 

結果

id   date  two_days 

1 12NOV1980 14NOV1980 
2 20OCT1996 22OCT1996 
3 21DEC1999 23DEC1999 

我要的是輸出日期應採用以下格式:

id   date  two_days 

1 12NOV80 14NOV80 
2 20OCT96 22OCT96 
3 21DEC99 23DEC99 

此外,當我執行以下操作:

data have01211; 
set WORK.XX; 
two_days_before = intnx('day', Date, -2); 
two_days_after = intnx('day', Date, 2); 
run; 

proc print data = have01211 noobs; 
format two_days_before two_days_after date8.; 
run; 

結果我得到的是如如下:

two_days_before two_days_after 
20764 20768 
20758 20762 
20763 20767 
20730 20734 

爲什麼這?爲什麼與原始數據不一樣?

+0

我想我得到了爲two_days_before two_days_after爲數字。 – ZeekDSA

回答

1

關於你的第一個問題 - 只需要修改的格式如下:

data temp3a; 
set temp2; 
two_days = intnx('day',date,2); 
run; 
proc print data = temp3a noobs; 
format date two_days date8.; /* shorter date format length */ 
run; 

關於第二個問題 - 要應用的格式在proc print但不是數據集(我假設你正在談論have01211) 。只需在數據步附加格式這些變量如下:

data have01211; 
    set WORK.temp2; 
    two_days_before = intnx('day', Date, -2); 
    two_days_after = intnx('day', Date, 2); 
    format two_days_before two_days_after date8.; 
run; 

解釋 - 當你在一個進程的打印應用格式,它僅適用於打印一步。如果在創建數據集時添加格式,它與該數據集永久保存 - 所以其實你不需要在任何後續proc print的格式聲明:

proc print data = have01211 noobs; 
run; 
+0

感謝您澄清我的疑惑並糾正我的錯誤。 – ZeekDSA