2012-01-17 100 views
3

對於經濟學任務,我需要使用來自美聯儲網站的季度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拒絕從日期列導入數據,因此我的整個代碼都不起作用!

我將不勝感激關於如何調試,或如何更好地做到這一點的任何建議!

+0

我認爲你已經將你的目標與你的問題混淆了。我可以告訴你如何找到連續的負數,但如果'xlsread'失敗,它不會對你有所幫助。 – 2012-01-17 01:22:22

回答

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

一旦你已經成功地存儲日期欄:

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

strfind(diff(ind)', [1 1]) 
  1. 得到負值
  2. 看你是否能找到3個指數(DIFF = 1) 的指數 - >回答:經濟衰退開始的所有日期的指數