-
Notifications
You must be signed in to change notification settings - Fork 14
/
Chapter 05.sas
138 lines (104 loc) · 3.38 KB
/
Chapter 05.sas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
*** 5.3;
proc sgplot data=flights_911;
format Passengers comma8.;
series x=date y=passengers;
run;
*** 5.4;
PROC EXPAND DATA=flights_911 OUT=AirlinePassengersSmooth;
CONVERT passengers = pass_smooth_backw / TRANSFORMOUT = (MOVAVE 12);
RUN;
proc sgplot data=AirlinePassengersSmooth;
format Passengers pass_smooth_backw comma8.;
series x=date y=passengers;
series x=date y=pass_smooth_backw;
run;
PROC EXPAND DATA=flights_911 OUT=AirlinePassengersSmooth;
CONVERT passengers = pass_smooth_backw / TRANSFORMOUT = (MOVAVE 12);
CONVERT Passengers = pass_smooth_center/ TRANSFORMOUT = (CMOVAVE 12);
RUN;
proc sgplot data=AirlinePassengersSmooth;
format Passengers pass_smooth_backw comma8.;
series x=date y=passengers;
series x=date y=pass_smooth_backw;
series x=date y=pass_smooth_center;
refline '01SEP2001'd / axis = x;
run;
*** 5.3.4;
PROC EXPAND DATA=flights_911 OUT=AirlinePassengersSmooth;
CONVERT passengers = pass_smooth_backw / TRANSFORMOUT = (MOVAVE 12);
CONVERT Passengers = pass_smooth_center/ TRANSFORMOUT = (CMOVAVE
(0.0467 0.0833 0.833 0.0833 0.833 0.0833 0.833 0.0833 0.833 0.0833 0.833 0.0833 0.0467));
RUN;
*** 5.3.5;
PROC EXPAND DATA=flights_911 OUT=AirlinePassengersSmooth;
CONVERT passengers = pass_smooth_backw / TRANSFORMOUT = (MOVAVE 12);
CONVERT passengers = pass_smooth_backwTr / TRANSFORMOUT = (MOVAVE 12 trimleft 11);
CONVERT Passengers = pass_smooth_centerWgt/ TRANSFORMOUT = (CMOVAVE
(0.0467 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0467));
CONVERT Passengers = pass_smooth_centerWgtTr/ TRANSFORMOUT = (CMOVAVE
(0.0467 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0467)
TRIM 6);
RUN;
data AirlinePassengersSmooth;
format time 8. date yymmp7. passengers 8. ;
set AirlinePassengersSmooth;
*where 0 <= time <= 12;
where 158 <= time <= 169;
drop Nflights;
run;
*** 5.4;
Data Smooth_911_DST;
set flights_911;
Passengers_Smoothed = mean(Passengers,
Lag(Passengers),
Lag2(Passengers),
Lag3(Passengers),
Lag4(Passengers),
Lag5(Passengers),
Lag6(Passengers),
Lag7(Passengers),
Lag8(Passengers),
Lag9(Passengers),
Lag10(Passengers),
Lag11(Passengers));
run;
Data Smooth_911_DST;
set flights_911;
Passengers_Smoothed = (Passengers +
Lag(Passengers) +
Lag2(Passengers)+
Lag3(Passengers)+
Lag4(Passengers)+
Lag5(Passengers)+
Lag6(Passengers)+
Lag7(Passengers)+
Lag8(Passengers)+
Lag9(Passengers)+
Lag10(Passengers)+
Lag11(Passengers))/12;
run;
data Smooth_911_efficent;
retain s;
set flights_911;
s = sum (s, Passengers, -lag12(Passengers)) ;
Passengers_Smoothed = s / min(_N_,12);
drop s;
run;
*** 5.4.5;
proc FCMP outlib = sasuser.funcs.util;
subroutine cmovave3(actual[*], movave[*]);
outargs movave;
do t = 1 to DIM(actual);
movave[t] = (actual[t-1]+actual[t]+actual[t+1])/3;
end;
endsub;
run;
options cmplib=sasuser.funcs;
proc timedata data=work.flights_911
out =work.flights_911_out
outarray=flights_911_array;
id date interval=month accumulate=total format=yymmdd.;
vars passengers;
outarrays passengers_moveave;
call cmovave3(passengers, passengers_moveave);
run;