簡體   English   中英

SAS-匯總當天發生的每日內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM