diff --git a/src/mdbnomics2dseries/mdbnomics2dseries.m b/src/mdbnomics2dseries/mdbnomics2dseries.m index 1ced8460dabe9d45917f88d6060dacf7d7f833d5..2310b633a19aae4b851ddd2a180d28e648c2c1c2 100644 --- a/src/mdbnomics2dseries/mdbnomics2dseries.m +++ b/src/mdbnomics2dseries/mdbnomics2dseries.m @@ -52,3 +52,81 @@ switch nargin error('mdbnomics2dseries:WrongInputArguments', 'Too many input arguments! Please check the manual.') end end + +%@test:1 +%$ try +%$ dseries_src_root = strrep(which('initialize_dseries_class'),'initialize_dseries_class.m',''); +%$ df_id = load([dseries_src_root '../tests/data/mdbnomics/df_id.mat']); +%$ df = df_id.df; +%$ ds = mdbnomics2dseries(df); +%$ t(1) = true; +%$ catch +%$ t(1) = false; +%$ end +%$ +%$ if t(1) +%$ t(2) = dassert(ds.name, {'EA19_1_0_0_0_ZUTN'}); +%$ t(3) = dassert(ds.vobs, 1); +%$ t(4) = dassert(ds.tags.provider_code, {'AMECO'}); +%$ t(5:10) = isfield(ds.tags, {'freq', 'unit', 'geo', 'Frequency', 'Unit', 'Country'}); +%$ end +%$ +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ try +%$ dseries_src_root = strrep(which('initialize_dseries_class'),'initialize_dseries_class.m',''); +%$ df_bi = load([dseries_src_root '../tests/data/mdbnomics/df_bi-annual.mat']); +%$ df = df_bi.df; +%$ ds = mdbnomics2dseries(df); +%$ t(1) = true; +%$ catch +%$ t(1) = false; +%$ end +%$ +%$ if t(1) +%$ t(2) = dassert(ds.name, {'S_EUR_AL'}); +%$ t(3) = dassert(ds.vobs, 1); +%$ t(4) = dassert(ds.dates.freq, 2); +%$ t(4) = dassert(ds.tags.provider_code, {'Eurostat'}); +%$ t(5:10) = isfield(ds.tags, {'FREQ', 'currency', 'geo', 'Frequency', 'Currency', 'Geopolitical_entity__reporting_'}); +%$ end +%$ +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ try +%$ dseries_src_root = strrep(which('initialize_dseries_class'),'initialize_dseries_class.m',''); +%$ df_dataset = load([dseries_src_root '../tests/data/mdbnomics/df_dataset.mat']); +%$ df = df_dataset.df; +%$ ds = mdbnomics2dseries(df); +%$ t(1) = true; +%$ catch +%$ t(1) = false; +%$ end +%$ +%$ if t(1) +%$ t(2) = dassert(ds.vobs, 49); +%$ t(3) = dassert(ds.dates.freq, 1); +%$ t(4) = dassert(length(unique(ds.tags.provider_code)), 1); +%$ t(5) = dassert(size(ds.tags.provider_code,1), 49); +%$ end +%$ +%$ T = all(t); +%@eof:3 + +%@test:4 +%$ try +%$ dseries_src_root = strrep(which('initialize_dseries_class'),'initialize_dseries_class.m',''); +%$ df_multi = load([dseries_src_root '../tests/data/mdbnomics/df_multi-freq.mat']); +%$ df = df_multi.df; +%$ ds = mdbnomics2dseries(df); +%$ t(1) = false; +%$ catch +%$ t(1) = true; +%$ end +%$ +%$ T = all(t); +%@eof:4 diff --git a/src/utilities/convert/convert_mdbnomics.m b/src/utilities/convert/convert_mdbnomics.m index 71a3180c6a67ce887f448803c334f46f6bfdc454..7e22b22413306ecb681723d91392e45cb161bfc9 100644 --- a/src/utilities/convert/convert_mdbnomics.m +++ b/src/utilities/convert/convert_mdbnomics.m @@ -29,13 +29,21 @@ end ds = dseries(); % Check for multiple datasets -dataset_codes = unique(o.data(:,o.col_idx.dataset_code),'stable'); +if isoctave() + dataset_codes = unique(o.data(:,o.col_idx.dataset_code)); +else + dataset_codes = unique(o.data(:,o.col_idx.dataset_code),'stable'); +end % Convert mdbnomics to dseries for ii = 1:length(dataset_codes) % Slice data for dataset ds_dataset = o.data(strcmp(o.data(:,o.col_idx.dataset_code),dataset_codes{ii}),:); - series_codes = unique(ds_dataset(:,o.col_idx.series_code),'stable'); + if isoctave() + series_codes = unique(ds_dataset(:,o.col_idx.series_code)); + else + series_codes = unique(ds_dataset(:,o.col_idx.series_code),'stable'); + end % Get list of variable names list_of_names = cellfun(@(x)regexprep(x, '[^a-zA-Z0-9]', '_'), series_codes, 'UniformOutput', false); % Get dataset values @@ -70,8 +78,8 @@ for ii = 1:length(dataset_codes) data_dataset = reshape(ds_dataset_values, max(series_length), size(series_codes, 1)); % Get dseries date format from dataset - starting_date = min(datetime(ds_dataset(:,o.col_idx.period), 'InputFormat', 'yyyy-MM-dd', 'Format', 'yyyy-MM-dd')); - original_period = ds_dataset(strcmp(ds_dataset(:,o.col_idx.period),string(starting_date)),o.col_idx.original_period); + starting_date = min(datenum(ds_dataset(:,o.col_idx.period))); + original_period = ds_dataset(strcmp(ds_dataset(:,o.col_idx.period),datestr(starting_date, 'yyyy-mm-dd')),o.col_idx.original_period); dseries_date = get_series_start_date(freq, original_period{1}); % Transform dataset into dseries dataset = dseries(data_dataset, dseries_date, list_of_names); @@ -82,7 +90,11 @@ end % Add tags to the variables if length(dataset_codes) > 1 - series_codes = unique(o.data(:,o.col_idx.series_code),'stable'); + if isoctave() + series_codes = unique(o.data(:,o.col_idx.series_code)); + else + series_codes = unique(o.data(:,o.col_idx.series_code),'stable'); + end list_of_names = cellfun(@(x)regexprep(x, '[^a-zA-Z0-9]', '_'), series_codes, 'UniformOutput', false); series_length = cell2mat(cellfun(@(x)length(find(strcmp(x, o.data(:,o.col_idx.series_code)))), series_codes, 'UniformOutput', false)); end diff --git a/tests/data/mdbnomics/df_bi-annual.mat b/tests/data/mdbnomics/df_bi-annual.mat new file mode 100644 index 0000000000000000000000000000000000000000..b099f35a73beef802f4b41424df602f11dc2d3cd Binary files /dev/null and b/tests/data/mdbnomics/df_bi-annual.mat differ diff --git a/tests/data/mdbnomics/df_dataset.mat b/tests/data/mdbnomics/df_dataset.mat new file mode 100644 index 0000000000000000000000000000000000000000..c7293af65e5d8f6db478b9bbd671eedc993e211f Binary files /dev/null and b/tests/data/mdbnomics/df_dataset.mat differ diff --git a/tests/data/mdbnomics/df_id.mat b/tests/data/mdbnomics/df_id.mat new file mode 100644 index 0000000000000000000000000000000000000000..0b3e4acaec2ecdc2eb3539bc78437685775cafeb Binary files /dev/null and b/tests/data/mdbnomics/df_id.mat differ diff --git a/tests/data/mdbnomics/df_multi-freq.mat b/tests/data/mdbnomics/df_multi-freq.mat new file mode 100644 index 0000000000000000000000000000000000000000..e4d49cf8425146372b0ad031d2d0f1be0c59ece8 Binary files /dev/null and b/tests/data/mdbnomics/df_multi-freq.mat differ