diff --git a/matlab/@dseries/subsasgn.m b/matlab/@dseries/subsasgn.m index 4874e2017dc237e2f4015f3b26d336911b5e7353..17fc472cde1a424a12d523fa8d443a802781202a 100644 --- a/matlab/@dseries/subsasgn.m +++ b/matlab/@dseries/subsasgn.m @@ -162,6 +162,41 @@ switch length(S) else error('dseries::subsasgn: The object on the right hand side must be a dseries object or a numeric array!') end + elseif ischar(S(1).subs{1}) && isequal(S(1).subs{1},':') && isempty(A) + if isnumeric(B) + if isequal(rows(B),1) + A.data = repmat(B,A.dates.ndat,1); + A.nobs = rows(A.data); + A.vobs = columns(A.data); + elseif isequal(rows(B),A.dates.ndat) + A.data = B; + A.nobs = rows(A.data); + A.vobs = columns(A.data); + else + error('dseries::subsasgn: Wrong syntax!') + end + if isempty(A.name) + A.name = default_name(A.vobs); + A.tex = name2tex(A.name); + end + elseif isdseries(B) + if isequal(B.nobs,1) + A.data = repmat(B.data,A.dates.ndat,1); + A.nobs = rows(A.data); + A.vobs = columns(A.data); + elseif isequal(B.nobs,A.dates.ndat) + A.data = B; + A.nobs = rows(A.data); + A.vobs = columns(A.data); + else + error('dseries::subsasgn: Wrong syntax!') + end + if isempty(A.name) + A.name = B.name; + A.tex = B.tex; + end + end + return else error('dseries::subsasgn: Wrong syntax!') end @@ -784,4 +819,52 @@ end %$ t(9) = dyn_assert(isequal(ts1.dates(1),dd),1); %$ end %$ T = all(t); -%@eof:20 \ No newline at end of file +%@eof:20 + +%@test:21 +%$ % Define a datasets. +%$ A = rand(4,3); +%$ +%$ % Instantiate an empty dseries object. +%$ ts = dseries(dates('1950Q1'):dates('1950Q4')); +%$ +%$ % Populate ts +%$ try +%$ ts(:) = A; +%$ t(1) = 1; +%$ catch +%$ t(1) = 0; +%$ end +%$ +%$ % Instantiate a time series object. +%$ if t(1) +%$ t(2) = dyn_assert(ts.vobs,3); +%$ t(3) = dyn_assert(ts.nobs,4); +%$ t(4) = dyn_assert(ts.data,A,1e-15); +%$ end +%$ T = all(t); +%@eof:21 + +%@test:21 +%$ % Define a datasets. +%$ A = rand(1,3); +%$ +%$ % Instantiate an empty dseries object. +%$ ts = dseries(dates('1950Q1'):dates('1950Q4')); +%$ +%$ % Populate ts +%$ try +%$ ts(:) = A; +%$ t(1) = 1; +%$ catch +%$ t(1) = 0; +%$ end +%$ +%$ % Instantiate a time series object. +%$ if t(1) +%$ t(2) = dyn_assert(ts.vobs,3); +%$ t(3) = dyn_assert(ts.nobs,4); +%$ t(4) = dyn_assert(ts.data,repmat(A,4,1),1e-15); +%$ end +%$ T = all(t); +%@eof:21 \ No newline at end of file