Skip to content
Snippets Groups Projects
Verified Commit bbfc1c6e authored by Stéphane Adjemian's avatar Stéphane Adjemian
Browse files

Add optional output.

Second output provides the same information but is easier to use (for instance, the second unit test, we use
the new ouput to select variables in a dseries object depending on the last observed period).
parent 581c420f
No related branches found
No related tags found
No related merge requests found
Pipeline #8604 passed
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment