此問題部分與此question有關。填寫滾動相關矩陣的缺失值
我的數據文件可以找到here。我使用2008年1月1日至2013年12月31日的樣本期。數據文件沒有缺失值。
以下代碼使用前一年價值的滾動窗口在2008年1月1日至2013年12月31日的每一天生成滾動相關矩陣。例如,2008年1月1日的AUT
和BEL
之間的相關性使用2007年1月1日至2008年1月1日的一系列值計算,並且對於所有其他配對也是如此。
data work.rolling;
set mm.rolling;
run;
%macro rollingCorrelations(inputDataset=, refDate=);
/*first get a list of unique dates on or after the reference date*/
proc freq data = &inputDataset. noprint;
where date >="&refDate."d;
table date/out = dates(keep = date);
run;
/*for each date calculate what the window range is, here using a year's length*/
data dateRanges(drop = date);
set dates end = endOfFile
nobs= numDates;
format toDate fromDate date9.;
toDate=date;
fromDate = intnx('year', toDate, -1, 's');
call symputx(compress("toDate"!!_n_), put(toDate,date9.));
call symputx(compress("fromDate"!!_n_), put(fromDate, date9.));
/*find how many times(numberOfWindows) we need to iterate through*/
if endOfFile then do;
call symputx("numberOfWindows", numDates);
end;
run;
%do i = 1 %to &numberOfWindows.;
/*create a temporary view which has the filtered data that is passed to PROC CORR*/
data windowedDataview/view = windowedDataview;
set &inputDataset.;
where date between "&&fromDate&i."d and "&&toDate&i."d;
drop date;
run;
/*the output dataset from each PROC CORR run will be
correlation_DDMMMYYY<from date>_DDMMMYY<start date>*/
proc corr data = windowedDataview
outp = correlations_&&fromDate&i.._&&toDate&i. (where=(_type_ = 'CORR'))
noprint;
run;
%end;
/*append all datasets into a single table*/
data all_correlations;
format from to date9.;
set correlations_:
indsname = datasetname
;
from = input(substr(datasetname,19,9),date9.);
to = input(substr(datasetname,29,9), date9.);
run;
%mend rollingCorrelations;
%rollingCorrelations(inputDataset=rolling, refDate=01JAN2008)
輸出的摘錄可以找到here。
可以看出,第2行到第53行顯示了2008年4月1日的相關矩陣。然而,2009年4月1日的相關矩陣出現了問題:ALPHA
有相關係數的缺失值,它的對。這是因爲如果查看數據文件,則從2008年4月1日到2009年4月1日的ALPHA
的值都爲零,因此導致除以零。這種情況也會發生在其他一些數據值上,例如,HSBC
也具有從08年4月1日到2009年4月1日0的所有值。
要解決此問題,我想知道上述代碼如何修改即在發生這種情況的情況下(即在2個特定日期之間所有值都爲0),則使用整個採樣週期簡單計算兩對數據值之間的相關性。例如,上缺少09年4月1日ALPHA
和AUT
之間的相關性,因此該相關性應該使用的值從1 2008 JAN到2013年12月31日,而不是使用的值從08年4月1日至09年4月1日
您是否擁有ETS授權? – Joe
@Joe我不確定其實,我該如何檢查? – user3184733
@ user3184733要檢查您已授權的產品,您可以運行以下過程來檢查許可證文件並將產品列表輸出到日誌中。然後簡單地做一個'CTRL + F'搜索'SAS/ETS'。 'PROC SETINIT;運行;' – 2014-02-27 10:23:31