Datetime sas:无法找出INTCK函数错误

Datetime sas:无法找出INTCK函数错误,datetime,sas,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_val

我正试图以以下方式使用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;

您需要转换为日期,因此可以使用:

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;

或者更好地使用probackpacker建议的datepart:

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;

了解SAS中日期和日期时间值之间的差异非常重要。这一点在本网站和其他网站上经常被提及。以下是文章的摘要和摘录

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

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

SAS datetime值是一个值 表示1960年1月1日和 指定日期内的小时/分钟/秒

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

将日期转换为日期时间很容易,将日期时间值转换为日期更容易:

dateval = datepart(dtval);

也就是说,您的
intck
函数可能抛出了一个错误,因为“月”是一个日期间隔,而不是日期时间间隔。使用“DTMONTH”可能会奏效。有关详细信息,请参见此。

substr解决方案有点粗糙。为什么不直接使用
datepart
dateval = datepart(dtval);