我是SAS的新手,很难找到两次约会的区别。我有两列: checkin_date和checkout_date,日期在mmddyy10中。格式(mm/dd/yyyy)。
我使用了以下代码:
stay_days= intck('day', checkin_day, checkout_day);我得到的日期在同一个月的日期正确的值,但错误的数值的日子是跨越两个月。例如,2014年06月2日和2014年11月2日之间的差额为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);发布于 2019-09-17 02:56:42
您的问题是在intck()函数中错误地使用变量。您使用的是变量"xxx_DAY“,它是月中的一天,而不是完整的日期。更改为stay_day= intck('day', checkin_date, checkout_date);
发布于 2019-09-15 17:14:02
您的数据可能在错误的变量中包含日期值。当使用减法时,顺序应该是ENDDATE - STARTDATE。在使用INTNX()函数时,顺序应该从STARTDATE到ENDDATE。在这两种情况下,如果STARTDATE变量中的值在ENDDATE变量中的值之后,则差异将是一个负数。
也许你需要清理数据?
唯一能得到-18的方法是比较2014-01-31和2014-02-13,如果你提取出这个月的那一天并减去它们。
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 13https://stackoverflow.com/questions/57946130
复制相似问题