2013-06-19 161 views
2

我想以下面的方式使用INTCK,但得到錯誤。我不確定我做錯了什麼。我很感謝你的幫助。謝謝。sas:無法找出INTCK函數錯誤

PROC FORMAT; 
PICTURE DTFMT LOW-HIGH='%0m/%0d/%Y' (DATATYPE=DATETIME); 
RUN; 

data want; 
dt_val1='17JUL2006:00:00:00.000'dt; 
dt_val2='17AUG2012:00:00:00.000'dt; 
format dt_val1 dt_val2 dt_val3 dtfmt.; 
dt_val3=intck('MONTH',dt_val1,dt_val2); 
put dt_val3; 
run; 

回答

4

重要的是要了解dif SAS中日期和日期時間值之間的差異。本網站和其他網站經常涉及這一點。這是official documentation和摘錄。

SAS日期值是表示1960年1月1日 和指定日期之間的天數的值。

SAS時間值是一個值 ,表示自當天午夜以來的秒數。 SAS時間值是86400介於0和

SAS日期時間值是表示1960年1月1日之間的秒數的值 ,和第二內的指定日期的 小時/分鐘/。

它們不能互換使用,但可以在它們之間進行轉換。看來你應該在這個應用程序中使用日期變量。這可能會讓你更容易一點。

轉換日期以日期時間是很簡單的日期時間值日期更容易:

dateval = datepart(dtval); 

也就是說,因爲「月」是一個日期區間,而不是一個日期時間間隔你intck功能可能引發錯誤。使用'DTMONTH'可能會起作用。請參閱link瞭解更多詳情。

+0

「DTMONTH」的工作。謝謝。 – Zenvega

1

你需要轉換爲日期,所以你可以使用:

data want; 
dt_val1='17JUL2006:00:00:00.000'dt; 
dt_val2='17AUG2012:00:00:00.000'dt; 
d1 =input(substr(put(dt_val1,datetime.),1,7),date7.); 
d2 =input(substr(put(dt_val2,datetime.),1,7),date7.); 
months=intck('month',d1,d2); 
run; 

data want; 
dt_val1='17JUL2006:00:00:00.000'd; 
dt_val2='17AUG2012:00:00:00.000'd; 
months=intck('month',dt_val1,dt_val2); 
run; 

甚至更​​好的使用日期部分爲probackpacker建議:

data want; 
dt_val1='17JUL2006:00:00:00.000'dt; 
dt_val2='17AUG2012:00:00:00.000'dt; 
months=intck('month',datepart(dt_val1),datepart(dt_val2)); 
run; 
+0

'substr'解決方案有點粗糙。爲什麼不使用'datepart'? –

+0

完全忘了它,謝謝那 – isJustMe