sas:无法弄清INTCK功能错误

时间:2013-06-19 13:40:33

标签: datetime 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;

2 个答案:

答案 0 :(得分:4)

了解SAS中日期和日期时间值之间的区别非常重要。本网站及其他网站经常对此进行介绍。这是official documentation和摘录。

  

SAS日期值是表示两者之间的天数的值   1960年1月1日和指定日期。

     

SAS时间值是一个值   表示当天午夜以来的秒数。   SAS时间值介于0和86400之间。

     

SAS datetime值是一个值   代表1960年1月1日和之间的秒数   在指定日期内的小时/分钟/秒。

它们不能互换使用,但您可以在它们之间进行转换。您似乎应该在此应用程序中使用日期变量。这可能会让事情变得更容易。

将日期转换为日期时间非常简单,日期时间值更容易日期:

dateval = datepart(dtval);

也就是说,您的intck函数可能会抛出错误,因为'MONTH'是日期间隔而不是日期时间间隔。使用'DTMONTH'可能会有效。有关详细信息,请参阅此link

答案 1 :(得分: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;

甚至更好地使用datepart作为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;