![](/img/trans.png)
[英]PROC UCM in SAS: How to specify day of week and month of the year seasonality in daily data series
[英]SAS - aggregating daily content with same day occurrences
我有每日數據,不是完全連續的(即一周中沒有全天),因此需要將其轉換為每周總計。 值得注意的是,數據與交易有關,因此同一天有多個觀察值。 使用以下PROC EXPAND過程會導致錯誤“數據集RAW.VLCC2011中觀察編號為2的ID變量FixtureDate = 04JAN2011的值與先前的觀察值相同”:
PROC EXPAND DATA = raw.VLCC2011 OUT = raw.VLCC2011_wkly FROM= Day TO = Week;
convert FixtureCargoSize/ OBSERVED=TOTAL method=aggregate;
ID FixtureDate;
run;
這是proc sql
的解決方案。 您也可以對數據步驟執行類似的操作。
proc sql;
create table VLCC2011_wkly as
select intnx('week', date, 0, 'end') as week, sum(FixtureCargoSize) as FixtureCargoSizeTotal
from VLCC2011
group by calculated week;
quit;
intnx
函數獲取一個日期並將其移至其他日期。 在這種情況下,它將采用任何日期並將其移動到一周的最后一天。 以這種方式匯總所有具有相同的工作日結束日期的日期,將給您想要的東西。
我沒有使用PROC EXPAND。 但是錯誤消息告訴您,它不喜歡每個ID值有多個觀察值。 也許您需要預處理輸入數據集RAW.VLCC2011,以便每個FIXTUREDATE最多存在一個觀察值。
這是我的解決方法(很長的路要走):
data raw.VLCC2011_wkly;
set raw.VLCC2011;
IF FixtureDay < 8 then FixtureWeek = 1;
IF FixtureDay > 7 and FixtureDay < 15 then FixtureWeek = 2;
IF FixtureDay > 14 and FixtureDay < 23 then FixtureWeek = 3;
IF FixtureDay > 22 and FixtureDay < 30 then FixtureWeek = 4;
IF FixtureDay > 29 and FixtureDay < 32 then FixtureWeek = 5;
run;
proc sql;
create table raw.VLCC2011_wkly1 as
select FixtureMonth, FixtureDay, FixtureWeek, FixtureCargoSize, sum(FixtureCargoSize) as CargoSizeTotal
from raw.VLCC2011_wkly
group by FixtureMonth, FixtureWeek
Order by FixtureMonth, FixtureWeek, FixtureDay;
quit;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.