proc expand
和proc timeseries
是積累和聚集,以一系列不同頻率的優秀工具。您可以將它們與分組處理結合以轉換爲您需要的任何時間段。
第1步:按MachineNo和日期
proc sort data=want;
by MachineNo Date;
run;
第2步:查找最小/最大結束的一系列的日期排列
的format=date9.
聲明是重要的日子。無論出於何種原因,某些SAS/ETS和HPF程序都需要日期文字來表示某些參數。
proc sql noprint;
select min(date) format=date9.,
max(date) format=date9.
into :min_date,
:max_date
from have;
quit;
第三步:將通過開始/結束日期每個MachineNo,積累每MachineNo天
下面的代碼將讓你對齊日常積累,除去每臺機器重複的日子,並設置Income
任何缺失的天數爲0.此步驟還將保證您的系列每個分組具有相同的時間間隔,允許您在不違反等距區間假設的情況下運行分層時間序列分析。
proc timeseries data=have
out=want_day;
by MachineNo;
id date interval=day
align=both
start="&min_date"d
end="&max_date"d;
var income/accumulate=total setmiss=0;
run;
步驟4:聚合每日對準以每週1天移位,每月
SAS的時間間隔能夠既相乘,並且移位。由於標準星期幾開始於星期天,因此我們希望將星期一的時間移動1天。
Standard Week
2 3 4 5 6 7 1
Mon Tue Wed Thu Fri Sat Sun
Shifted
1 2 3 4 5 6 7
Mon Tue Wed Thu Fri Sat Sun
間隔遵循的格式:
TimeInterval<Multiplier>.<Shift>
標準移位間隔爲1。對於所有的意圖和目的,考慮如1 0:1意味着它的未移位。 2意味着它被移動了1個週期。因此,在星期一開始的一週內,我們想要使用間隔Week.2
。
proc expand data=want_day
out=want_week
from=day
to=week.2;
id date;
convert income/method=aggregate observed=total;
run;
第5步:將週上月
proc expand data=want_week
out=want_month
from=week.2
to=month;
id date;
convert income/method=aggregate observed=total;
run;