1  REM ***CROSS2 10/30/73***
5  REM CROSS2, HP 36860A, 6/74
10  FILES *
20  PRINT 
30  PRINT 
40  PRINT TAB(20);"C R O S S T A B S   P R O G R A M"
50  PRINT 
60  PRINT "DO YOU WANT INSTRUCTIONS (1=YES, 0=NO)";
70  INPUT Q6
80  IF Q6=0 THEN 310
90  PRINT 
100  PRINT "***INSTRUCTIONS***"
110  PRINT "THIS PROGRAM PERFORMS A TWO-WAY FREQUENCY COUNT ON "
120  PRINT "RAW DATA. THE FREQUENCIES ARE USED TO CALCULATE A CHI-SQUARE STATISTIC."
130  PRINT "THE PROGRAM WILL TAKE A MAXIMUM OF 500 SUBJECTS AND WILL CROSS-CLASSIFY"
140  PRINT "THEM INTO A MAX. OF 6 INTERVALS PER VARIABLE."
160  PRINT "THE EXPECTED FREQUENCIES ARE ROUNDED TO WHOLE NUMBERS"
170  PRINT "AND THE CHI-SQUARE STATISTIC IS ROUNDED TO THREE DECIMAL"
180  PRINT "PLACES. ENTER DATA STARTING WITH STATEMENT 3000. ENTER ALL DATA FOR THE"
190  PRINT "FIRST VARIABLE BEFORE STARTING THE SECOND."
200  PRINT "DATA MAY OPTIONALLY BE READ FROM A FILE INSTEAD OF FROM DATA STATEMENTS."
210  PRINT "WHEN RUNNING, THE PROGRAM ASKS FOR THE # OF OBS., THE MIN. AND MAX. FOR"
215  PRINT "EACH VAR. AND THE # OF INTERVALS FOR EACH VAR. IF THE MIN. AND MAX."
220  PRINT "ARE BOTH ENTERED AS 1 FOR EITHER OR BOTH VARS., THE PROGRAM WILL"
225  PRINT "CALCULATE THE MIN AND MAX FROM THE DATA. IF A MIN LARGER THAN THE"
230  PRINT "SMALLEST VALUE IS ENTERED, ALL DATA BELOW THIS VALUE WILL BE IGNORED."
235  PRINT "SIMILARLY, MAX VALUES SMALLER THAN THE LARGEST DATA VALUE MAY BE USED."
240  PRINT "THE MIN AND MAX MAY ALSO BE SMALLER THAN THE SMALLEST VALUE OR LARGER"
245  PRINT "THAN THE LARGEST VALUE. SINCE THE MIN AND MAX ARE USED TO DETERMINE THE"
250  PRINT "END POINTS FOR EACH INTERVAL, THIS FEATURE MAY BE USEFUL FOR CONTROLLING"
255  PRINT "INTERVAL SIZE. THERE IS NO LIMIT TO THE RANGE OF THE DATA, BUT THE NO."
260  PRINT "OF INTERVALS MUST NOT EXCEED 6. BOTH VARIABLES NEED NOT HAVE THE SAME"
265  PRINT "NUMBER OF INTERVALS."
270  STOP 
280  DIM X[500,2]
290  DIM O[6,6],M[2,2],G[6,6],B[6,6],D[6,6]
300  DIM S[6],L[6],R[6],K[6],A$[6]
310  PRINT "1= DATA ON FILE, 0= DATA IN DATA STATEMENTS. WHICH";
320  INPUT Q7
330  IF Q7=0 THEN 370
340  PRINT "FILE NAME";
350  INPUT A$
360  ASSIGN A$,1,Z1
370  PRINT "ENTER # OF OBS. PER VARIABLE";
380  INPUT N
390  PRINT "ENTER THE MIN. VALUES FOR EACH VAR.";
400  INPUT L1,L2
410  PRINT "ENTER THE MAX. VALUES FOR EACH VAR.";
420  INPUT H1,H2
430  PRINT "ENTER THE # OF INTERVALS FOR EACH VAR.";
440  INPUT P1,P2
450  FOR J=1 TO 2
460  FOR I=1 TO N
470  IF Q7=1 THEN 500
480  READ X[I,J]
490  GOTO 510
500  READ #1;X[I,J]
510  NEXT I
520  NEXT J
530  IF H1>L1 THEN 730
540  FOR L=1 TO 2
550  LET J=K=1
560  FOR I=1 TO N
570  IF X[I,L]<X[J,L] THEN 590
580  LET J=I
590  IF X[I,L]>X[K,L] THEN 610
600  LET K=I
610  NEXT I
620  LET M[1,L]=X[J,L]
630  LET M[2,L]=X[K,L]
640  NEXT L
650  LET H1=M[1,1]
660  LET L1=M[2,1]
670  LET H2=M[1,2]
680  LET L2=M[2,2]
690  REM: 370-510 CALC. MAX. & MIN.
700  PRINT 
710  PRINT "FOR VAR. A, CALCULATED MIN.=";L1;"CALCULATED MAX.=";H1
720  PRINT "FOR VAR. B, CALCULATED MIN.=";L2;"CALCULATED MAX.=";H2
730  LET R1=H1-L1
740  LET R2=H2-L2
750  S1=P1/(R1+1)
760  S2=P2/(R2+1)
770  FOR I=1 TO N
780  LET X[I,1]=INT((X[I,1]-L1)*S1)+1
790  LET X[I,2]=INT((X[I,2]-L2)*S2)+1
800  NEXT I
810  MAT O=ZER[P1,P2]
820  LET N1=N
830  FOR I=1 TO N
840  IF X[I,1]<1 THEN 920
850  IF X[I,2]<1 THEN 920
860  IF X[I,1]>P1 THEN 920
870  IF X[I,2]>P2 THEN 920
880  LET T1=X[I,1]
890  LET T2=X[I,2]
900  LET O[T1,T2]=O[T1,T2]+1
910  GOTO 930
920  LET N1=N1-1
930  NEXT I
940  LET R1=C1=C9=Y=0
950  LET R2=C2=0
960  FOR I=1 TO P1
970  FOR J=1 TO P2
980  LET R2=R2+O[I,J]
990  NEXT J
1000  LET R[I]=R2
1010  LET R2=0
1020  NEXT I
1030  FOR J=1 TO P2
1040  FOR I=1 TO P1
1050  LET C2=C2+O[I,J]
1060  NEXT I
1070  LET K[J]=C2
1080  LET C2=0
1090  NEXT J
1100  GOSUB 1850
1110  MAT G=ZER[P3,P4]
1120  FOR I=1 TO P3
1130  FOR J=1 TO P4
1140  LET R1=R1+D[I,J]
1150  NEXT J
1160  LET S[I]=R1
1170  LET Y=Y+R1
1180  LET R1=0
1190  NEXT I
1200  FOR J=1 TO P4
1210  FOR I=1 TO P3
1220  LET C1=C1+D[I,J]
1230  NEXT I
1240  LET L[J]=C1
1250  LET C1=0
1260  NEXT J
1270  FOR I=1 TO P3
1280  FOR J=1 TO P4
1290  LET G[I,J]=(S[I]*L[J])/Y
1300  IF V=1 THEN 1330
1310  LET C9=C9+(D[I,J]-G[I,J])^2/G[I,J]
1320  GOTO 1340
1330  LET C9=C9+(ABS(D[I,J]-G[I,J])-.5)^2/G[I,J]
1340  LET G[I,J]=INT(G[I,J]+.5)
1350  NEXT J
1360  NEXT I
1370  PRINT 
1380  PRINT 
1390  PRINT TAB(20);"OBSERVED FREQUENCY TABLE"
1400  PRINT 
1410  PRINT TAB(P2*7-3);"ROW SUMS"
1420  FOR I=1 TO P1
1430  FOR J=1 TO P2
1440  PRINT TAB((J-1)*7-1);O[I,J];
1450  NEXT J
1460  PRINT R[I]
1470  PRINT 
1480  NEXT I
1490  PRINT 
1500  FOR J=1 TO P2
1510  PRINT TAB((J-1)*7-1);K[J];
1520  NEXT J
1530  PRINT TAB((J-1)*7-1);"COL SUMS"
1540  PRINT 
1550  PRINT 
1560  PRINT "GRAND TOTAL=";Y
1570  PRINT 
1580  PRINT 
1590  PRINT TAB(20);"EXPECTED FREQUENCY TABLE"
1600  PRINT 
1610  MAT  PRINT G;
1620  PRINT 
1630  PRINT 
1640  PRINT "*******************************************************"
1650  PRINT 
1660  IF V=1 THEN 1680
1670  GOTO 1690
1680  PRINT "BECAUSE DF WAS EQUAL TO 1, YATE'S CORRECTION WAS MADE"
1690  PRINT "CHI-SQUARE FOR A";P3;"BY";P4;"MATRIX, WHERE DF=";V
1700  PRINT "IS EQUAL TO";INT(1000*C9+.5)*.001
1710  PRINT 
1720  PRINT 
1730  PRINT "*******************************************************"
1740  IF P3<P1 THEN 1770
1750  IF P4<P2 THEN 1770
1760  GOTO 9999
1770  PRINT 
1780  PRINT TAB(3);"NOTE: SINCE ONE OR MORE OF THE OBSERVED ROWS/COLS."
1790  PRINT TAB(9);"WERE EQUAL TO ZERO, THEY WERE NOT INCLUDED IN"
1800  PRINT TAB(9);"THE CALCULATION OF THE EXPECTED MATRIX OR THE "
1810  PRINT TAB(9);"CHI-SQUARE STATISTIC. THE DF ARE CALCULATED"
1820  PRINT TAB(9);"APPROPRIATELY."
1830  PRINT 
1840  STOP 
1850  REM: ZERO TEST SUBROUTINE
1860  MAT B=ZER[P1,P2]
1870  MAT D=ZER[P1,P2]
1880  LET N9=1
1890  LET P3=P4=0
1900  FOR L=1 TO P1
1910  FOR Z=1 TO P2
1920  IF O[L,Z]#0 THEN 1950
1930  NEXT Z
1940  GOTO 1990
1950  FOR J=1 TO P2
1960  LET B[N9,J]=O[L,J]
1970  NEXT J
1980  LET N9=N9+1
1990  NEXT L
2000  LET P3=N9-1
2010  IF P3=0 THEN 2030
2020  GOTO 2060
2030  PRINT "YOUR OBSERVED FREQUENCY MATRIX WAS A NULL MATRIX; FURTHER"
2040  PRINT "CALCULATIONS WERE TERMINATED."
2050  GOTO 9999
2060  LET N8=1
2070  FOR Z=1 TO P2
2080  FOR L=1 TO P3
2090  IF B[L,Z]#0 THEN 2120
2100  NEXT L
2110  GOTO 2160
2120  FOR I=1 TO P3
2130  LET D[I,N8]=B[I,Z]
2140  NEXT I
2150  LET N8=N8+1
2160  NEXT Z
2170  LET P4=N8-1
2180  LET V=(P3-1)*(P4-1)
2190  RETURN 
3000  REM: ***** DATA STATEMENTS SHOULD START HERE *****
9999  END 
