寻找连续的负值

时间:2012-01-17 00:51:34

标签: matlab

对于经济学分配,我需要使用美联储网站季度GDP增长率数据中的数据,并计算出从1952年到2010年发生了多少技术性衰退。

这意味着我需要计算连续负增长率为3或更多的序列数。

这是我到目前为止的代码:

Data = xlsread('Q3.xls','D14:E271');

matlab_dates = Data(:,1)
real_GDP_growth = Data(:,2);

growth_data = [matlab_dates real_GDP_growth];

T = length(growth_data);
recession_tracker = zeros(T,1);


for i=2:T
    if growth_data(i,2) < 0
        recession_tracker(i,1) = recession_tracker(i-1,1) + 1;
    else recession_tracker(i,1) = 0;
    end
end

所以Q3.xls包含2列(D和E)。列D是日期列(季度日期格式为yyyy-mm-dd,例如1952-01-01,1952-04-01); E栏是增长率栏。

Matlab拒绝从Date列导入数据,因此我的整个代码都不起作用!

我很感激有关如何调试或如何做得更好的任何建议!

2 个答案:

答案 0 :(得分:1)

如果您想要了解日期,那么您可能会发现以下内容非常有用。

您可以通过抓取xlsread()的第二个输出,然后使用datenum()取消格式化来获取格式化日期。

[M,txt] = xlsread('Q3.xls','D14:E271');

for row = 1:size(txt, 1)
    try
        % assuming date in the first column
        date = datenum( txt{row, 1}, 'yyyy-mm-dd');
    catch
        continue;
    end

    ... do something with date ...
end

答案 1 :(得分:1)

一旦您设法存储了日期列:

ind = find( growth_data(:,2) < 0)

strfind( diff(ind)', [1 1] )
  1. 获取负值指数
  2. 看看你是否能找到3个升序指数(diff = 1) - &GT;回答:经济衰退开始的所有日期的指数