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