50  COM A[300],B[300],C[300],D[300],E[300],F[300]
60  COM G[25],N0,M0,I0,I1,I2,I3,I4,I5,I6,Z0
70  COM H[100],I[100],M1,M2,A0
80  COM J[20],K[20],L[20],M[20]
81  COM R$[7],R9
83  COM D0
86  COM I7,I8,I9,L0,Z1,Z2,Z3,A1,N1
87  COM S0,S1,K0,K1,J0,J1,L1,N2
89  COM A$[4],N[4],B$[4],O[4]
90  COM Q$[7],Q9
91  COM N3,N4,N5,N6
93  FILES *
94  DIM I$[3],N$[7]
95  DIM Y$[3]
96  MAT A=ZER
97  MAT B=ZER
98  MAT D=ZER
99  MAT F=ZER
100  MAT E=ZER
101  I3=I4=I5=0
102  MAT L=ZER
103  MAT C=ZER
104  D9=0
120  Y$="YES"
180  J[1]=-1
190  K[1]=-1
200  L[1]=-1
210  M[1]=-1
211  PRINT LIN(2)"IS DATA TO BE ENTERED FROM TERMINAL (Y OR N)"
212  INPUT I$
213  IF I$[1,1]#"Y" THEN 220
214  D9=1
216  GOTO 340
220  PRINT LIN(1)"NAME OF INPUT FILE"
240  INPUT N$
250  ASSIGN N$,1,I7
251  IF I7#2 THEN 260
252  PRINT "READ-ONLY FILE -- #1"
253  GOTO 290
260  IF I7=0 THEN 290
270  PRINT "CANNOT ACCESS FILE -- STATUS ";I7
280  GOTO 220
290  PRINT "DELETE FIRST TWO OBSERVATIONS (Y OR N)"
300  INPUT I$
310  IF I$[1,1]#"Y" THEN 340
320  READ #1;E[101],E[102]
325  PRINT  USING 335;E[101]
330  PRINT  USING 335;E[102]
335  IMAGE 10D.5D,10X,"HAS BEEN DELETED."
340  PRINT "NUMBER OF OBSERVATIONS (100 MAXIMUM)"
360  INPUT N0
361  IF N0 <= 100 THEN 380
362  PRINT "ONLY 100 OBSERVATIONS ALLOWED"
363  GOTO 220
380  N0=N0+100
381  IF D9#1 THEN 390
382  PRINT "ENTER INPUT DATA (ONE OBSERVATION PER LINE)"
390  FOR I8=101 TO N0
391  IF D9=1 THEN 395
392  READ #1;E[I8]
393  GOTO 400
395  INPUT E[I8]
400  NEXT I8
402  IF D9#1 THEN 416
404  PRINT "DO YOU WISH TO SAVE THE DATA ON A FILE (Y OR N)"
405  INPUT I$
406  IF I$[1,1]#"Y" THEN 416
407  PRINT "NAME OF OUTPUT FILE "
408  INPUT N$
409  ASSIGN N$,1,I7
410  IF I7=0 THEN 413
411  PRINT "CANNOT ACCESS FILE -- STATUS ",I7
412  GOTO 407
413  FOR I8=101 TO N0
414  PRINT #1;E[I8]
415  NEXT I8
416  PRINT "CONSTRUCT MODEL ON NATURAL LOGS OF DATA (Y OR N)"
430  L0=0
440  INPUT I$
450  IF I$[1,1]#"Y" THEN 460
455  L0=1
460  IF (L0#1) THEN 490
470  FOR I8=101 TO N0
480  E[I8]=LOG(E[I8])
481  NEXT I8
490  MAT A=E
510  PRINT "ENTER P,D,Q"
540  INPUT I0,I1,I2
550  PRINT "SEASONAL PERIOD (0 IF NONSEASONAL)"
570  INPUT Z0
580  IF (Z0=0) THEN 640
590  PRINT "ENTER BP,BD,BQ"
630  INPUT I3,I4,I5
640  Z1=I1
650  Z2=I4
660  IF (Z1=0) THEN 730
670  Z1=Z1-1
680  N0=N0-1
690  FOR I8=1 TO N0
700  Z3=I8+1
710  A[I8]=A[Z3]-A[I8]
711  NEXT I8
720  GOTO 660
730  IF (Z2=0) THEN 800
740  Z2=Z2-1
750  N0=N0-Z0
760  FOR I8=1 TO N0
770  Z3=I8+Z0
780  A[I8]=A[Z3]-A[I8]
781  NEXT I8
790  GOTO 730
800  FOR I8=101 TO N0
810  Z3=101+N0-I8
820  C[Z3]=A[I8]
821  NEXT I8
830  M1=I0+I3*Z0
840  M2=I2+I5*Z0
850  M0=M1 MAX M2
860  A0=0
870  FOR I8=101 TO N0
880  A0=A0+A[I8]
881  NEXT I8
890  A0=A0/(N0-100)
900  A1=A0
910  PRINT "INCLUDE A PARAMETER FOR NON-ZERO SERIES MEAN"
930  I6=1
940  INPUT I$
950  IF I$[1,1]="Y" THEN 960
955  A0=0
957  I6=0
960  N1=I0+I2+I3+I5+I6
1010  GOSUB 2490
1020  IF I6=0 THEN 1100
1030  G[N1]=A0
1100  PRINT "ESTIMATE PARAMETERS"
1101  PRINT "  (AUTOMATIC SEARCH=1)"
1102  PRINT "  (MANUAL SEARCH=2)"
1103  INPUT I8
1120  IF I8=2 THEN 1382
1161  R9=1170
1162  R$="$IDA53"
1163  CHAIN "$IDA53D"
1170  PRINT "PARAMETER VALUES"
1180  IF I0=0 THEN 1210
1182  PRINT  USING 1205
1195  FOR I8=1 TO I0
1197  PRINT  USING 1280;I8,J[I8+1]
1199  NEXT I8
1205  IMAGE  5X,"AUTOREGRESSIVE PARAMETER(S)"
1210  IF I2=0 THEN 1230
1211  PRINT  USING 1225
1215  FOR I8=1 TO I2
1217  PRINT  USING 1280;I8,L[I8+1]
1219  NEXT I8
1225  IMAGE 5X,"MOVING AVERAGE PARAMETER(S)"
1230  IF I3=0 THEN 1250
1231  PRINT  USING 1245
1235  FOR I8=1 TO I3
1237  PRINT  USING 1280;I8,K[I8+1]
1239  NEXT I8
1245  IMAGE 5X,"SEASONAL AUTOREGRESSIVE PARAMETER(S)"
1250  IF I5=0 THEN 1270
1252  PRINT  USING 1265
1255  FOR I8=1 TO I5
1257  PRINT  USING 1280;I8,M[I8+1]
1259  NEXT I8
1265  IMAGE 5X,"SEASONAL MOVING AVERAGE PARAMETER(S)"
1270  IF I6=0 THEN 1290
1275  PRINT "     MEAN "
1276  PRINT  USING 1282;A0*(1-G[N1+1])
1280  IMAGE 5X,"*NUMBER ",2D,"=",4D.4D
1282  IMAGE 5X,"*",10X,4D.4D
1290  S0=SQR(S0/(N0-100-N1))
1300  PRINT  USING 1495;S0
1310  PRINT "MANUAL SEARCH"
1330  INPUT I$
1340  IF I$[1,1]#"Y" THEN 1520
1350  GOSUB 2490
1355  IF I6=0 THEN 1382
1356  A0=0
1357  FOR I8=101 TO N0
1358  A0=A0+A[I8]
1359  NEXT I8
1360  A0=A0/(N0-100)
1361  A1=A0
1362  G[N1]=A0
1382  Q$="$IDA53"
1384  Q9=1480
1386  CHAIN "$IDA53A"
1390  S0=SQR(D0/(N0-100-N1))
1400  PRINT  USING 1495;S0
1410  GOSUB 2490
1440  S1=0
1450  FOR I8=1 TO N1
1460  S1=S1+G[I8]
1461  NEXT I8
1470  IF (S1=0) THEN 1520
1472  Q$="$IDA53"
1474  Q9=1480
1476  CHAIN "$IDA53A"
1480  S0=SQR(D0/(N0-100-N1))
1490  PRINT  USING 1495;S0
1495  IMAGE "STANDARD ERROR = ",6D.6D
1500  PRINT "CONTINUE MANUAL SEARCH (Y OR N)"
1505  INPUT I$
1510  IF I$[1,1]="Y" THEN 1410
1520  PRINT "THE FINAL MODEL IS"
1540  K0=I4
1550  K1=Z0
1560  IF (K0 <= 0) THEN 1810
1570  J0=M1+K1
1580  IF (M1<K1) THEN 1690
1590  IF (J0 <= M1) THEN 1640
1600  J1=J0-K1
1610  I[J0+1]=-I[J1+1]
1620  J0=J0-1
1630  GOTO 1590
1640  IF (J0<K1) THEN 1780
1650  J1=J0-K1
1660  I[J0+1]=I[J0+1]-I[J1+1]
1670  J0=J0-1
1680  GOTO 1640
1690  IF (J0<K1) THEN 1740
1700  J1=J0-K1
1710  I[J0+1]=-I[J1+1]
1720  J0=J0-1
1730  GOTO 1690
1740  IF (J0 <= M1) THEN 1780
1750  I[J0+1]=0
1760  J0=J0-1
1770  GOTO 1740
1780  K0=K0-1
1790  M1=M1+K1
1800  GOTO 1560
1810  IF K1=1 THEN 1841
1820  K0=I1
1830  K1=1
1840  GOTO 1560
1841  R$="$IDA53"
1842  R9=1844
1843  CHAIN "$IDA53G"
1844  PRINT "WRITE RESIDUALS TO AN OUTPUT FILE (Y OR N)"
1845  INPUT I$
1846  IF I$[1,1]#"Y" THEN 1860
1847  PRINT "NAME OF OUTPUT FILE"
1848  INPUT N$
1849  ASSIGN N$,1,I7
1850  IF I7=0 THEN 1853
1851  PRINT "CANNOT ACCESS FILE -- STATUS ",I7
1852  GOTO 1847
1853  FOR I8=101 TO N0
1854  PRINT #1;D[I8]
1855  NEXT I8
1860  L1=I1+I4*Z0
1870  N0=N0+L1
1880  I8=N0
1890  Z3=I8-L1
1900  D[I8]=D[Z3]
1910  F[I8]=E[I8]-D[I8]
1920  I8=I8-1
1930  IF (I8 >= 101) THEN 1890
1935  N2=N0
1940  PRINT "FORECAST FUTURE TIME SERIES VALUES"
1960  INPUT I$
1970  IF I$[1,1]#"Y" THEN 2100
1980  PRINT "HOW MANY PERIODS AHEAD"
2000  INPUT J0
2010  Z3=N0+1
2020  N2=N0
2030  N0=N0+J0
2040  FOR I8=Z3 TO N0
2051  GOSUB 2360
2060  E[I8]=F[I8]
2061  NEXT I8
2070  FOR I8=Z3 TO N0
2080  E[I8]=0
2090  IF L0#1 THEN 2097
2095  F[I8]=EXP(F[I8])
2097  NEXT I8
2100  IF L0#1 THEN 2250
2110  FOR I8=101 TO N2
2120  E[I8]=EXP(E[I8])
2130  F[I8]=EXP(F[I8])
2140  D[I8]=E[I8]-F[I8]
2141  NEXT I8
2238  IMAGE 4X,"PERIOD",11X,"ACTUAL",4X,"FORECAST",7X,"ERROR"
2239  IMAGE 5X,5D,5X,3(8D.3D)
2250  PRINT "LIST ACTUALS,FORECASTS AND ERRORS (Y OR N)"
2252  INPUT I$
2254  IF I$[1,1]#"Y" THEN 2350
2256  PRINT "FIRST PERIOD TO WRITE"
2270  INPUT Z3
2275  PRINT  USING 2238
2280  Z3=Z3+100
2290  FOR I8=Z3 TO N0
2300  J0=I8-100
2310  PRINT  USING 2239;J0,E[I8],F[I8],D[I8]
2331  NEXT I8
2350  STOP 
2360  S2=0
2370  IF (M1=0) THEN 2420
2380  FOR J2=1 TO M1
2390  K2=I8-J2
2400  S2=S2+I[J2+1]*(E[K2]-A0)
2410  NEXT J2
2420  IF (M2=0) THEN 2470
2430  FOR J2=1 TO M2
2440  K2=I8-J2
2450  S2=S2-H[J2+1]*D[K2]
2460  NEXT J2
2470  F[I8]=S2+A0
2480  RETURN 
2490  PRINT "ENTER PARAMETERS IN THE FOLLOWING ORDER"
2495  G[N1+1]=0
2500  IF  NOT (I0#0) THEN 2560
2510  PRINT "AUTOREGRESSIVE PARAMETER(S)"
2520  FOR I8=1 TO I0
2530  PRINT  USING 2770;I8
2540  INPUT G[I8]
2545  G[N1+1]=G[N1+1]+G[I8]
2550  NEXT I8
2560  IF  NOT (I2#0) THEN 2620
2570  PRINT "MOVING AVERAGE PARAMETER(S)"
2580  FOR I8=I0+1 TO I2+I0
2590  PRINT  USING 2770;I8-I0
2600  INPUT G[I8]
2610  NEXT I8
2620  IF  NOT (I3#0) THEN 2680
2630  PRINT "SEASONAL AUTOREGRESSIVE PARAMETER(S)"
2640  FOR I8=I0+I2+1 TO I0+I2+I3
2650  PRINT  USING 2770;I8-(I0+I2)
2660  INPUT G[I8]
2670  NEXT I8
2680  IF I5=0 THEN 2775
2690  PRINT "SEASONAL MOVING AVERAGE PARAMETER(S)"
2700  FOR I8=I0+I2+I3+1 TO I0+I2+I3+I5
2710  PRINT  USING 2770;I8-(I0+I2+I3)
2720  INPUT G[I8]
2730  NEXT I8
2770  IMAGE"*NUMBER ",2D,"="
2775  RETURN 
2780  END 
