diff --git a/src/@dseries/lastobservedperiods.m b/src/@dseries/lastobservedperiods.m index 1a450362686b27a87ec1c861d164634bd19c79e3..aa2a7d590294bb87db5ed6ae500b6fe29128bc22 100644 --- a/src/@dseries/lastobservedperiods.m +++ b/src/@dseries/lastobservedperiods.m @@ -1,4 +1,4 @@ -function b = lastobservedperiods(o) +function [b, D] = lastobservedperiods(o) % Return, for each variable, the last period without missing observations (last period without NaN). % @@ -7,6 +7,7 @@ function b = lastobservedperiods(o) % % OUTPUTS % - b [struct] with N fields, each name field is a variable name and its content a date object. +% - D [dates] N elements. % Copyright © 2023 Dynare Team % @@ -32,6 +33,13 @@ for i=1:o.vobs b.(o.name{i}) = o.dates(find(d(:,i), 1, 'last')); end +if nargout>1 + D = dates(o.dates.freq); + for i=1:o.vobs + D.append_(b.(o.name{i})); + end +end + return % --*-- Unit tests --*-- %@test:1 @@ -55,3 +63,30 @@ end T = all(t); %@eof:1 + +%@test:2 +try + a = randn(10, 3); + a(end,1) = NaN; + a(end,2) = NaN; + a(end-1,2) = NaN; + A = dseries([a, a], '2000Q1', {'A1', 'A2', 'A3', 'B1', 'B2', 'B3'}); + [b, D] = lastobservedperiods(A); + d = unique(D); + tmp = {}; + for i=1:length(d) + tmp{i} = A(D==d(i)); + end + t(1) = true; +catch + t(1) = false; +end + +if t(1) + for i=1:length(d) + t(i+1) = isequal(tmp{i}.name,{sprintf('A%u', i); sprintf('B%u', i)}) + end +end + +T = all(t); +%@eof:2