10  COM X[103,22],M[19,19],U[19,19],Q[20],V[20],P[78]
30  COM M$[60],N$[72]
40  COM N,K,N8,K8,N9,K9,Q9,Q7,Q5,Q4,Q3,Q2,Q1
45  COM I3,I4,U9,X$[20]
50  REM:29MAY74
52  REM:UPDATING MEANS AND STD.DEV.(S) OF COL(S). J1 TO J2
100  DIM A$[12],C$[7],D$[12]
110  PRINT 
120  IF I4=0 THEN 9998
130  Q[3]=1
700  REM: UPDATING WHEN COLS.I3 TO I4 APPEND OR REPLACE J1 TO J2
702  REM
707  I1=1
709  I2=N
710  J1=J2=I3=I4
718  FOR J=J1 TO J2
720  IF Q[2]=0 THEN 730
722  IF J>K THEN 730
724  GOSUB 9000
726  NEXT J
730  PRINT "UPDATING MEAN, STD.DEV....";
750  K=K MAX J2
760  REM:  COMPUTE Z, THE NEW Q4, AND COMPARE TO OLD Q4
770  Z=X[N9+3,1]
780  FOR I=2 TO K
790  Z=Z MAX X[N9+3,I]
792  NEXT I
793  Z=Z+1
794  GOSUB 6010
796  GOSUB 6600
800  FOR J=J1 TO J2
802  GOSUB 6020
804  NEXT J
810  IF Q4=Z THEN 882
815  GOSUB 6600
820  IF Q4>Z THEN 860
830  REM:  DELETE 1 OR MORE ROWS IF Q4 < Z
832  FOR I=Q4 TO (Z-1)
840  GOSUB 6230
842  NEXT I
850  GOTO 882
860  REM:  RECOVER 1 OR MORE ROWS IF Q4 > Z
862  FOR I=Z TO (Q4-1)
870  GOSUB 6330
872  NEXT I
882  FOR J=1 TO K
884  GOSUB 6700
886  NEXT J
888  PRINT 
889  IF Q4=Z THEN 905
890  Q4=Z
892  PRINT "OBSERVATIONS IN FIRST"Q4-1"ROWS NOW UNDEFINED."
894  IF Q[2]=0 THEN 905
896  Q[4]=1
910  IF Q3#1 THEN 970
920  PRINT 
930  PRINT "GIVE NAME(S) OF NEW VARIABLE(S) "
940  FOR I=J1 TO J2
950  GOSUB 3000
955  NEXT I
960  PRINT 
970  IF K<K9-1 THEN 1000
980  PRINT "WARNING!"'10'13"DATA MATRIX FULL."
990  PRINT 
1010  GOTO 9998
2999  REM
3000  PRINT  USING 3020;I
3020  IMAGE #,"VAR.",XDD,X
3030  INPUT D$
3040  IF I>10 THEN 3070
3050  M$[6*I-5,6*I]=D$[1,6]
3060  GOTO 3100
3070  N$[6*I-65,6*I-60]=D$[1,6]
3100  RETURN 
5980  REM
5990  REM
6010  FOR I8=Q4 TO N
6012  IF X[I8,K9+2]=1 THEN 6016
6014  NEXT I8
6016  RETURN 
6019  REM:COMPUTING MEAN,STD.DEV.
6020  I5=0
6025  I6=X[I8,J]
6030  FOR I=(I8+1) TO N
6040  I5=I5+X[I,K9+2]*(X[I,J]-I6)
6060  NEXT I
6070  J5=I6+I5/N0
6080  J6=0
6090  FOR I=I8 TO N
6100  IF X[I,K9+2]=0 THEN 6120
6110  J6=J6+(X[I,J]-J5)^2
6120  NEXT I
6130  X[N9+1,J]=J5
6140  X[N9+2,J]=SQR(J6/(N0-1))
6150  RETURN 
6200  REM:  DEL.OBS.
6230  IF X[I,K9+2]=0 THEN 6270
6235  FOR J=1 TO K
6240  X[N9+1,J]=N0*X[N9+1,J]/(N0-1)-X[I,J]/(N0-1)
6245  S=(N0-1)*X[N9+2,J]^2
6250  S=S-(X[I,J]-X[N9+1,J])^2*(N0-1)/N0
6255  X[N9+2,J]=SQR(S/(N0-2))
6260  NEXT J
6265  N0=N0-1
6270  RETURN 
6299  REM
6300  REM:  ADD OBS.
6330  IF X[I,K9+2]=0 THEN 6370
6335  FOR J=1 TO K
6340  X[N9+1,J]=N0*X[N9+1,J]/(N0+1)+X[I,J]/(N0+1)
6345  S=(N0-1)*X[N9+2,J]^2
6350  S=S+(X[I,J]-X[N9+1,J])^2*(N0+1)/N0
6355  X[N9+2,J]=SQR(S/N0)
6360  NEXT J
6365  N0=N0+1
6370  RETURN 
6599  REM
6600  REM: # OBS. IN COL.
6610  N0=0
6620  FOR J0=Q4 TO N
6630  N0=N0+X[J0,K9+2]
6640  NEXT J0
6650  RETURN 
6700  IF X[N9+2,J]=0 THEN 6760
6702  IF X[N9+1,J]=0 THEN 6770
6705  C=ABS(X[N9+2,J]/X[N9+1,J])
6710  IF C>.02 THEN 6770
6715  PRINT 
6720  PRINT LIN(1);"FOR VAR."J",ABS.(STD.DEV./MEAN) IS"C
6732  PRINT "MEAN IS "X[N9+1,J]
6734  PRINT "STD.DEV. IS "X[N9+2,J]
6740  PRINT "WARNING!"'7'10'13"ROUNDING ERRORS MAY BE LARGE."
6741  IF Q[6]=45 OR Q9>1 THEN 6770
6742  PRINT "YOU MAY WISH TO RECODE THE ORIGINAL DATA BY ADDING AN"
6744  PRINT "APPROPRIATE CONSTANT (POSSIBLY NEGATIVE) TO EACH"
6746  PRINT "OBSERVATION AND THEN RE-ENTER THE DATA."
6750  GOTO 6770
6760  PRINT 
6765  PRINT "COL."J" IS A CONSTANT EQUAL TO "X[N9+1,J];
6770  RETURN 
8999  REM
9000  REM:WIPING OUT REGRESSION IF J IS IN MAT V
9010  FOR I=1 TO K8+1
9020  IF J#V[I] THEN 9100
9030  GOTO 9200
9100  NEXT I
9110  REM:J NOT IN MAT V
9120  GOTO 9300
9200  PRINT "THE FITTED AND RESIDUAL VALUES FROM THE CURRENT REGRESSION OF:"
9206  PRINT "THE DEPENDENT VARIABLE IN COL."V[K8+1]
9207  PRINT "ON THE INDEPENDENT VARIABLES IN COL(S). :"
9210  FOR I=1 TO K8
9220  PRINT V[I]",";
9230  V[I]=0
9240  IF I#10*INT(I/10) THEN 9260
9250  PRINT 
9260  NEXT I
9280  V[K8+1]=0
9282  Q[2]=Q[4]=0
9290  FOR I=1 TO N9+3
9292  X[I,K9]=X[I,K9+1]=0
9294  NEXT I
9296  PRINT "HAS BEEN ERASED BECAUSE YOU REPLACED DATA IN COL."J
9300  RETURN 
9301  REM
9912  CHAIN "$IDA12",Z
9998  CHAIN "$IDA",150
9999  END 
