From f4c01a43bc2882e7fd18f3cd82344fff9644088c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Thu, 5 Sep 2013 17:46:04 +0200 Subject: [PATCH] Introduce new syntax for shifting backward or forward a dynSeries object. Suppose that ts is a dynSeries object and let t = dynTimeIndex(); Then us = ts.lag(); <=> us = ts(t-1); us = ts.lag(2); <=> us = ts(t-2); us = ts.lead(); <=> us = ts(t+1); Added corresponding unitary test. --- matlab/@dynSeries/subsref.m | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/matlab/@dynSeries/subsref.m b/matlab/@dynSeries/subsref.m index b129662c3..63847ccac 100644 --- a/matlab/@dynSeries/subsref.m +++ b/matlab/@dynSeries/subsref.m @@ -151,6 +151,17 @@ switch S(1).type else error(['dynSeries::subsref: dynSeries object ''' inputname(1) ''' is not empty!']) end + elseif isa(S(1).subs{1},'dynTimeIndex') + % shift backward/forward (lag/lead) dynSeries object + shift = S(1).subs{1}.index; + if shift>0 + B = feval('lead',A,shift); + elseif shift<0 + B = feval('lag',A,-shift); + else + % Do nothing. + B = A; + end elseif isa(S(1).subs{1},'dynDates') % Extract a subsample using a dynDates object [junk,tdx] = intersect(A.time.time,S(1).subs{1}.time,'rows'); @@ -532,3 +543,25 @@ end %$ %$ T = all(t); %@eof:12 + +%@test:13 +%$ try +%$ data = transpose(0:1:50); +%$ ts = dynSeries(data,'1950Q1'); +%$ a = ts.lag; +%$ b = ts.lead; +%$ tt = dynTimeIndex(); +%$ c = ts(tt-1); +%$ d = ts(tt+1); +%$ t(1) = 1; +%$ catch +%$ t(1) = 0; +%$ end +%$ +%$ if t(1)>1 +%$ t(2) = (a==c); +%$ t(3) = (b==d); +%$ end +%$ +%$ T = all(t); +%@eof:13 \ No newline at end of file