2014-02-14 61 views
2

我想從SAS(ccyymm)中的字段數值中獲取每月的最後一天。yyyymm轉換爲full sas日期(dd/mm/ccyy) - SAS

例如 201401將是31-01-2014。

我設法讓現場顯示爲日期型字段(仍然顯示爲CCYYMM雖然)在一個PROC SQL SELECT語句下面的代碼

year_month_field INFORMAT YYMMN6. AS year_month_date 

我認爲,我發現了一些代碼另一個問題,一旦我能得到完整的日期,應該給我這個月的最後一天。

INTNX (MONTH , year_month_date , 1) -1 

這項工作?如果沒有任何其他建議,將不勝感激。

+0

你爲什麼不試試看看會發生什麼?順便說一下,月份需要在'INTNX'函數中引用。例如:'intnx('month',input('201401',yymmn6。),1)-1' – 2014-02-14 12:44:54

+0

我收到以下錯誤消息,我想您可能在我編輯原始問題之前已經閱讀並回復。該字段實際上是數字的,而不是我首先想到的varchar。錯誤:INPUT函數需要一個字符參數。 錯誤:函數INTNX需要一個數字表達式作爲參數2. 錯誤:使用減法( - )的表達式需要數字類型。 –

+1

在這種情況下,您首先需要對數字yyyymm使用'put',然後應用輸入函數。 – 2014-02-14 13:15:14

回答

3

注意以下MMMYYYY格式「這個月的最後一天」,這取決於YYYYMM是字符或數字變量之間怎麼一會轉換YYYYMM的差異。

data test; 
yyyymm_character='201401'; 
yyyymm_numeric=201401; 

date1=intnx('month', input(yyyymm_character, yymmn6.), 1)-1; 
date2=intnx('month', input(put(yyyymm_numeric,6.), yymmn6.), 1)-1; 
format date1 date2 date9.; 
/*date1=date2=31jan2014*/ 
run; 

或者,你可以使用內置的選項intnx功能來自動設置任何輸入日期以各月的最後一天。如下所示使用'e'

data test; 
yyyymm_character='201401'; 
yyyymm_numeric=201401; 

date1=intnx('month', input(yyyymm_character, yymmn6.), 0, 'e'); 
date2=intnx('month', input(put(yyyymm_numeric,6.), yymmn6.), 0,'e'); 
format date1 date2 date9.; 
/*date1=date2=31jan2014*/ 
run 
+0

太棒了!謝謝user102890! –