我是SAS的新手,我很难找到2个日期之间的差额。 我有2列:checkin_date和checkout_date 日期以mmddyy10为单位。格式(mm / dd / yyyy)。
我使用了以下代码:
stay_days= intck('day', checkin_day, checkout_day);
我在同一个月的日期中获得了正确的值,但在2个月中的几天中获得了错误的值。例如,2014年2月6日与2014年2月11日之间的差异为5。但是,2014年1月31日与2014年2月13日之间的差异为-18。
我也只是尝试将两者都减去:
stay_day = checkout_day - checkin_day;
我也得到相同的结果。
我的整个代码:
data hotel;
infile "XXXX\Hotel.dat";
input room_no num_guests checkin_month checkin_day checkin_year checkout_month checkout_day checkout_year internet_used $ days_used room_type $16. room_rate;
checkin_date = mdy(checkin_month,checkin_day,checkin_year);
informat checkin_date mmddyy.;
format checkin_date mmddyy10.;
checkout_date = mdy(checkout_month,checkout_day,checkout_year);
informat checkout_date mmddyy.;
format checkout_date mmddyy10.;
stay_day= intck('day', checkin_day, checkout_day);
答案 0 :(得分:2)
您的问题是错别字-在intck()函数中使用了错误的变量。您正在使用变量“ xxx_DAY”,它是一个月的DAY,而不是完整的DATE。更改为stay_day= intck('day', checkin_date, checkout_date);
答案 1 :(得分:1)
您的数据中的日期值可能在错误的变量中。使用减法时,顺序应为ENDDATE - STARTDATE
。使用INTNX()
函数时,顺序应为STARTDATE至ENDDATE。无论哪种情况,如果STARTDATE变量中的值是ENDDATE变量中的值之后,则差将为负数。
也许您需要清理数据?
获取2014年1月31日和2014年2月13日之间的-18的唯一方法是提取月份中的某天并将其减去。
diff3 = day(end) - day(start);
这与从13中减去31相同。
使用日期作为示例:
data check;
input start end ;
informat start end mmddyy.;
format start end yymmdd10.;
diff1=intck('day',start,end);
diff2=end-start;
cards;
02/06/2014 02/11/2014
1/31/2014 2/13/2014
;
结果:
Obs start end diff1 diff2
1 2014-02-06 2014-02-11 5 5
2 2014-01-31 2014-02-13 13 13