我有一个Access函数,它以下列格式将值表导出到Excel。
ID CurveShortName MarkRunID MarkDate ZeroCurveID MaturityDate ZeroRate DiscountFactor
15 CAD Sovereign 10091 7/2/2015 15-10091 7/2/2015 0.007499923 1
15 CAD Sovereign 10091 7/2/2015 15-10091 7/3/2015 0.007499923 0.999979452
15 CAD Sovereign 10091 7/2/2015 15-10091 7/5/2015 0.00899634 0.999186963
15 CAD Sovereign 10091 7/2/2015 15-10091 7/6/2015 0.008993128 0.998473566等。
MaturityDate列中缺少一些日期(例如,7/4/2015 ),我希望使用与同一MarkDate相关的所有值(即7/2/2015)插值该值。
如何在Access中的值之间插入?我有一个用于Excel的函数,但我很难将它转换为访问VBA。我在考虑建立一个以
Function CurveInterpolateRecordset(rsCurve As Recordset, InterpDate As Date) As Double这样我就可以直接用给定的曲线和日期进行插值,但我无法让它工作。
发布于 2015-09-18 22:25:35
这是一个普通的SQL解决方案。是用SQL server创建的,但是所有函数都应该在ACCESS中找到。
描述
allDates,您可以在这里存储所有可用的日期,这样就可以找到丢失的日期。有函数可以很容易地创建该表。rangesInter --计算范围,如果范围是>1 day,则缺少日期。在这种情况下,保存startRate和changeRate进行插值。(min , max)表一样。
SQL Fiddle演示
SELECT
IIF(i.MarkDate IS NULL, r.MarkDate, i.MarkDate) as MarkDate,
a.MaturityDate,
IIF(
i.ZeroRate IS NULL,
r.startRate + DATEDIFF ( day , r.begindate, a.MaturityDate ) * rateChange,
i.ZeroRate
) as ZeroRate, -- use values from r to interpolate rate
i.*, r.*
FROM allDates a
left Join Inter I
on a.MaturityDate = I.MaturityDate
cross join
(SELECT MIN(MaturityDate) minDate, MAX(MaturityDate) maxDate
FROM Inter) as t
left join rangesInter r
on a.MaturityDate > r.[begindate]
and a.MaturityDate < r.[enddate]
where a.MaturityDate >= t.minDate
and a.MaturityDate <= t.maxDate;发布于 2015-09-18 21:28:56
下面是标识缺失值的代码:
查找缺失值
虽然第2页下载中的代码显示了如何查找缺少的日期:
找出失踪日期
有了这些,就像Varun状态一样,使用线性插值来计算丢失的测量值。
https://stackoverflow.com/questions/32659527
复制相似问题