2

我正在尝试以下列方式使用 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

2 回答 2

4

了解 SAS 中日期和日期时间值之间的区别很重要。本网站和其他网站经常对此进行介绍。这是官方文档和摘录。

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

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

SAS 日期时间值是表示从 1960 年 1 月 1 日到指定日期内的小时/分钟/秒之间的秒数的值。

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

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

dateval = datepart(dtval);

也就是说,您的intck函数可能会引发错误,因为 'MONTH' 是日期间隔而不是日期时间间隔。使用“DTMONTH”可能会奏效。请参阅此链接了解更多详情。

于 2013-06-19T14:02:27.457 回答
1

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

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;
于 2013-06-19T13:57:51.170 回答