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