有人可以帮助我解决问题吗?
sample1:
ReportMonthYear ProductItemCode ClosedDate PriorMonthCalendarDate
20160331 1234 24Mar2016 0:00:00 20160201
sample2:
ReportMonthYear ProductItemCode OpenDate ClosedDate OverDraftExpiryDate
20160229 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
20150930 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
20151130 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
20150731 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
20150831 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
20160131 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
20160331 1234 13Mar2015 0:00:00 24Mar2016 0:00:00
20151231 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
20151031 1234 13Mar2015 0:00:00 28Oct2016 0:00:00
使用T-SQL而不是使用Proc SQL时,我得到正确的结果。
需要的输出:
ProductItemCode ReportMonthYear PriorMonthCalendarDate ClosedDate OverDraftExpiryDate earlyclosuremonths
1234 20160331 20160229 2016-03-24 00:00:00 28Oct2016 0:00:00 7
T sql中的代码:
select
cd.ProductItemCode,
cd.ReportMonthYear,
cd.PriorMonthYear,
cd.ClosedDate,
df.OverDraftExpiryDate,
datediff(m,cd.ClosedDate,OverDraftExpiryDate) EarlyClosureMonths
from
sample1 cd
inner join sample2 df
on cd.ProductItemCode = df.ProductItemCode
and cd.PriorMonthYear = df.ReportMonthYear
Proc sql中的代码;
proc sql;
select
cd.ProductItemCode,
cd.ReportMonthYear,
cd.PriorMonthCalendarDate,
cd.ClosedDate,
df.OverDraftExpiryDate,
intck('month',cd.ClosedDate,df.OverDraftExpiryDate) as EarlyClosureMonths
from
sample1 cd
inner join sample2 df
on cd.ProductItemCode = df.ProductItemCode
and cd.PriorMonthCalendarDate = df.ReportMonthYear;
quit;
答案 0 :(得分:1)
看起来您的“日期”变量实际上具有日期时间值而不是日期值。日期存储为自1960年以来的天数,而日期时间存储为秒数。
如果您以秒为单位而不是几天来计算月份,您将得到错误的答案。请改用dtmonth间隔。
intck('dtmonth',cd.ClosedDate,df.OverDraftExpiryDate) as EarlyClosureMonths
或将日期时间值转换为日期并使用月间隔。
intck('month',datepart(cd.ClosedDate),datepart(df.OverDraftExpiryDate)) as EarlyClosureMonths