1 SUB CROSS0 & ! 500.23 - STAT11 - CROSS0 & ! & ! CROSS-TABULATION MODULE & ! & ! RELEASED FOR SUBMISSION TO THE DECUS LIBRARY BY THE & ! DEC ENGINEERING SYSTEMS GROUP AND THE EDUCATION PRODUCTS GROUP & ! SEPTEMBER, 1977 & ! & 2 ! COPYRIGHT (C) 1973, DIGITAL EQUIPMENT CORPORATION, & ! & ! MAYNARD, MASSACHUSETTS & 3 ! THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE & ! ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION OF & ! DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT AS & ! MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. & 4 ! THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT & ! NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL & ! EQUIPMENT CORPORATION. & 5 ! DEC ASSUMES NO RESPONSIBILITY FOR USE OR RELIABILITY OF ITS & ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. & ! & ! & 6 ! THIS MODULE PERFORMS CROSS-TABULATION FOR ANY TWO VARIABLES IN THE & ! DATA MATRIX. & ! & ! & 7 ! AUTHOR: MICHAEL D. KNAUER & ! & ! VERSION NUMBER: 001 & ! & ! DATE: OCTOBER, 1973 & ! & ! & 8 ! MODIFICATIONS: MAY, 1975 & ! & ! MODIFIED TO ACCEPT MISSING DATA POINTS & ! & ! BY ARDOTH HASSLER WILSON & ! CENTRAL STATE UNIVERSITY & ! EDMOND, OKLAHOMA & ! & 00009! MODIFICATIONS: JUNE, 1976 & ! & ! CTRL/C TRAP ADDED & 10 ! & ! CALLING ARGUMENTS & 11 ! 1) VARIABLE NAME: F3$ & ! RANGE OF VALUES: S00000.RWM - S99999.RWM & ! USE: NAME OF THE 250 ROW BY 15 COLUMN & ! VIRTUAL DATA MATRIX. & 13 ! 2) VARIABLE NAME: F4$ & ! RANGE OF VALUES: S00000.ESF - S99999.ESF & ! USE: NAME OF ELEMENTARY STATISTICS FILE & 15 ! 3) VARIABLE NAME: R% & ! RANGE OF VALUES: 1 - 250 & ! USE: NUMBER OF ROWS IN DATA MATRIX & 17 ! 4) VARIABLE NAME: C% & ! RANGE OF VALUES: 1 - 15 & ! USE: NUMBER OF COLUMNS IN DATA MATRIX & ! & 20 ! & ! & ! RETURNING ARGUMENTS & ! & ! NONE -- THIS MODULE DOES NOT ADD TO OR CHANGE ANY OF THE & ! FILES OR VARIABLES PASSED TO IT. & ! & 30 ! & ! DESCRIPTION OF FUNCTION & 31 ! THIS MODULE PERFORMS CROSS-TABULATION FOR ANY TWO VARIABLES & ! IN THE DATA MATRIX. THE USER CAN ALSO HAVE PRINTED THE & ! CHI-SQUARE OF THE CROSS-TABLE AND A TABLE OF EXPECTED & ! FREQUENCIES. & 32 ! AFTER OBTAINING VARIABLE NUMBERS AND NUMBERS OF INTERVALS & ! FROM THE USER, IT READS AND SORTS THE DATA POINTS FROM THE & ! DATA MATRIX, THEN COMPUTES AND PRINTS THE CROSS TABLE, ROW & ! BY ROW. & 33 ! IF THE USER WANTS, IT THEN COMPUTES AND PRINTS A TABLE OF & ! EXPECTED FREQUENCIES AND/OR THE CHI-SQUARE OF THE CROSS TABLE. & 34 ! UNLESS THE USER WANTS ANOTHER CROSS-TABULATION, CROSS0 THEN & ! RETURNS CONTROL TO STATCM. & ! & 90 ! & ! Modifications: August,1981 & ! & ! COMMON (STAT) MODULE$ = 6%, LINE%, SAV.F$ = 127% & ! added to replace core common and also to let STTMGR know & ! who to chain to (MODULE$). Once i MODULE$, LINE% indicates & ! line to begin execution. & ! & \ COMMON (STAT) MODULE$ = 6%, LINE%, SAV.F$ = 127% & 99 ! & ! & ! & ! THIS SECTION OPENS THE DATA FILE AND ASKS THE USER TO ENTER THE & ! NUMBERS OF TWO VARIABLES TO BE USED IN THE CROSS-TABULATION. & ! & ! & 100 ON ERROR GOTO 9000 & \ GOSUB 10000 & \ !F$=SYS(CHR$(7%)) & \ F$ = SAV.F$ 110 R%=VAL(MID(F$,46%,5%)) 120 C%=VAL(MID(F$,51%,5%)) 130 F3$=MID(F$,31%,15%) 135 A9$=MID(F$,62%,9%) & \ A9$=LEFT(A9$,INSTR(5%,A9$,"]")) & \ H9=.9E-38 140 OPEN F3$ FOR INPUT AS FILE 3, VIRTUAL 150 DIM #3,A(250%,15%) 160 DIM X(250%),Y(250%),A%(10%) 170 L6%=0% 172 L7%=0% 200 PRINT "ENTER TWO VARIABLES FOR CROSS TABULATION" 205 INPUT "(X) HORIZONTAL AND (Y) VERTICAL";X%,Y% & \ PRINT 210 IF X%>=1% AND Y%>=1% AND X%<=C% AND Y%<=C% GOTO 225 212 PRINT "YOUR VARIABLE NUMBERS MUST BE BETWEEN 1 AND";C% 215 PRINT "PLEASE TRY AGAIN" 220 GOTO 200 225 ! & ! & ! & ! HERE THE USER IS ASKED TO ENTER THE NUMBER OF INTERVALS HE WANTS IN & ! THE CROSS-TABLE FOR EACH VARIABLE. & ! & ! & 230 PRINT "ENTER THE NUMBER OF INTERVALS FOR VARIABLE";X% 235 INPUT "(MAXIMUM IS 10)"; I1% 240 IF I1%>=1% AND I1%<=10% GOTO 260 245 PRINT "YOU MUST SPECIFY FROM 1 TO 10 INTERVALS" 250 GOTO 230 260 PRINT "ENTER THE NUMBER OF INTERVALS FOR VARIABLE";Y% 265 INPUT "(MAXIMUM IS 10)";I2% 266 PRINT 270 IF I2%>=1% AND I2%<=10% GOTO 300 280 PRINT "YOU MUST SPECIFY FROM 1 TO 10 INTERVALS" 290 GOTO 260 299 ! & ! & ! & ! THIS CODE TRANSFERS THE DATA FOR THE TWO VARIABLES FROM THE DATA MATRIX & ! TO THE WORKING STORAGE ARRAYS X AND Y. & ! & ! & 300 I9%=0% & \ I8%=0% 310 FOR I%=1% TO R% & \ IF A(I%,X%)=H9 OR A(I%,Y%)=H9 THEN I8%=I8%+1% & \ GOTO 325 320 I9%=I9%+1% & \ X(I9%)=A(I%,X%) & \ Y(I9%)=A(I%,Y%) 325 NEXT I% 329 ! & ! & ! & ! USING THE MAXIMUM AND MINIMUM FROM THE ELEMENTARY STATISTICS FILE, & ! THIS SECTION COMPUTES THE X AND Y INTERVAL VALUES. & ! & ! & 330 F4$=LEFT(F3$,6%)+".ESF" 340 OPEN F4$ FOR INPUT AS FILE 4, VIRTUAL 350 DIM #4,S(10%,15%) 360 X5=(S(1%,X%)-S(2%,X%))/I1% 370 Y5=(S(1%,Y%)-S(2%,Y%))/I2% 399 ! & ! & ! & ! HERE THE Y'S ARE SORTED IN DECREASING ORDER OF MAGNITUDE, KEEPING & ! THE X'S MATCHING. & ! & ! & 400 T9%=I9%-1% 410 FOR K%=1% TO R% 420 S9%=0% 430 FOR J%=1% TO T9% 440 IF Y(J%)>=Y(J%+1%) GOTO 490 450 Q1=X(J%) & \ Q2=Y(J%) 460 X(J%)=X(J%+1%) & \ Y(J%)=Y(J%+1%) 470 X(J%+1%)=Q1 & \ Y(J%+1%)=Q2 480 S9%=1% 490 NEXT J% 500 IF S9%=0% GOTO 600 510 T9%=T9%-1% 520 NEXT K% 589 ! & ! & ! & ! THIS CODE MAKES FREQUENCY COUNTS FOR EACH CELL AND PRINTS THE CROSS- & ! TABLE, ROW BYE ROW. & ! & ! & 590 DIM G(10%,10%) 600 V=Y(1%) 610 N%=1% 650 FOR J%=0% TO I2%*2%-1% 655 IF J%=I2%*2%-1% THEN V=Y(I9%) 660 IF J%-(J%/2%)*2%<>0% GOTO 700 670 PRINT USING "########.###",V; 680 PRINT " + " 690 GOTO 850 700 PRINT SPACE$(12)+" . "; 710 A%(I%)=0% FOR I%=0% TO 10% 730 IF Y(N%)<(V-Y5) GOTO 800 740 I5%=(X(N%)-S(2%,X%))/X5 750 A%(I5%)=A%(I5%)+1% 751 ! & ! & ! & ! HERE, IF ROUND-OFF ERROR CAUSES THE COMPUTED SUBSCRIPT I5% TO BE & ! GREATER THAN I1%-1% RATHER THAN EQUAL TO OR LESS THAN I1%-1%, THE & ! APPROPRIATE I1%-1% CELL COUNT IS INCREMENTED, AS IT SHOULD BE. & ! & ! & 752 IF I5%>I1%-1% THEN A%(I1%-1%)=A%(I1%-1%)+1% 753 IF I5%>I1%-1% THEN G((J%-1%)/2%,I1%-1%)=G((J%-1%)/2%,I1%-1%)+1 755 G((J%-1%)/2%,I5%)=G((J%-1%)/2%,I5%)+1 759 ! & ! & ! & ! THIS CODE PRINTS EACH ROW OF THE CROSS TABLE. NOTE THAT V IS & ! DECREMENTED TO THE NEXT LOWER INTERVAL BOUND. & ! & ! & 760 N%=N%+1% 770 IF N%>I9% GOTO 800 780 GOTO 730 800 FOR I%=0% TO I1%-1% 810 PRINT USING "### ",A%(I%); 820 NEXT I% 830 PRINT 835 V=V-Y5 840 IF N%>I9% GOTO 900 850 NEXT J% 899 ! & ! & ! & ! THIS SECTION PRINTS LABELS ALONG THE BOTTOM OF THE CROSS TABLE. & ! & ! & 900 PRINT USING "########.###",Y(I9%); 910 PRINT " +"; 920 PRINT "....+"; FOR I%=1% TO I1%+1% 930 PRINT & \ PRINT SPACE$(10); 940 H=S(2%,X%) 950 FOR I%=0% TO I1% STEP 2% 960 PRINT USING "#####.### ",H; 970 H=H+2*X5 980 NEXT I% 985 PRINT & \ PRINT SPACE$(15); 990 H=S(2%,X%)+X5 1000 FOR I%=1% TO I1% STEP 2% 1005 PRINT USING "#####.### ",H; 1010 H=H+2*X5 1015 NEXT I% 1016 ! & ! & ! NOTE THAT HERE CONTROL IS TRANSFERRED DOWN TO THE CHI SQUARE & ! QUESTION; AND THEN BACK UP TO 1020 IF THE ANSWER IS YES. & ! & ! 1017 L5%=0% & \ X2=0.0 1018 GOTO 3000 1019 ! & ! & ! & ! T IS THE ROW TOTAL. IT IS COMPUTED HERE AND IS THE SUM OF THE & ! FREQUENCY COUNTS FOR A GIVEN ROW IN THE CROSS TABLE. IT IS USED & ! IN CALCULATING THE EXPECTED FREQUENCIES AND THE CHI SQUARE. & ! & ! & 1020 FOR J%=0% TO I2%-1% 1030 T=0.0 1040 T=T+G(J%,I%) FOR I%=0% TO I1%-1% 1042 IF T<>0 GOTO 1050 1044 L7%=L7%+1% 1049 ! & ! & ! & ! T2 IS THE COLUMN TOTAL. IT IS COMPUTED HERE AND IS THE SUM OF & ! THE FREQUENCY COUNTS FOR A GIVEN COLUMN IN THE CROSS TABLE. IT & ! IS USED IN CALCULATING THE EXPECTED FREQUENCIES AND THE CHI SQ. & ! & ! & 1050 FOR K%=0% TO I1%-1% 1054 T2=0.0 1055 T2=T2+G(I%,K%) FOR I%=0% TO I2%-1% 1057 IF T2<>0 GOTO 1060 1058 L6%=L6%+1% 1059 ! & ! & ! & ! THE E(J%,K%)'S, EXPECTED FREQUENCIES FOR EACH CELL, AND X2, & ! THE CUMULATIVE CHI SQUARE, ARE COMPUTED HERE. & ! & ! & 1060 E(J%,K%)=(T*T2)/N 1064 IF E(J%,K%)=0 GOTO 1080 1065 IF E(J%,K%)<5 THEN L5%=L5%+1% 1070 X2=X2+(G(J%,K%)-E(J%,K%))^2/E(J%,K%) 1080 NEXT K% 1090 NEXT J% 1094 ! & ! L6% AND L7% ARE COUNTS OF THE NUMBER OF ROWS AND COLUMNS IN THE & ! CROSS TABLE WITH ALL ZERO ENTRIES. THESE COUNTS ARE COMBINED INTO & ! L6% AND THE TOTAL IS PRINTED ALONG WITH THE CHI SQUARE. & ! & ! & 1095 L6%=L6%/I2%+L7% 1099 ! & ! & ! & ! THIS CODE PRINTS THE TABLE OF EXPECTED FREQUENCIES. THE ALGORITHM & ! IS COMPLICATED BY THE FACT THAT ONLY SIX COLUMNS CAN BE PRINTED & ! ACROSS THE PAGE. HENCE THE TABLE MAY HAVE TO BE PRINTED IN TWO & ! PARTS. & ! & ! & 1100 D%=(I2%-1%)*(I1%-1%) 1105 INPUT "DO YOU WISH TO PRINT EXPECTED FREQUENCIES";P$ & \ PRINT 1107 IF LEFT(P$,1%)="Y" GOTO 1115 1109 IF LEFT(P$,1%)="N" OR P$="" GOTO 1500 1110 IF P$<>"YES" GOTO 1500 1111 PRINT "YOU MUST ANSWER EITHER YES OR NO" 1113 GOTO 1105 1115 PRINT " EXPECTED FREQUENCY IN EACH CELL" & \ PRINT 1120 C1%=1% & \ C2%=I1% 1125 K%=C1%+5% & \ IF K%>I1% THEN K%=I1%-C1%+1% ELSE K%=6% 1130 PRINT "ROW/COL"; 1135 PRINT TAB(1%+K1%*11%);C1%+K1%-1%; FOR K1%=1% TO K% & \ PRINT 1150 FOR J%=0% TO I2%-1% 1160 PRINT J%+1%;TAB(5%); 1170 FOR K%=C1%-1% TO C1%+4% 1175 IF K%>I1%-1% GOTO 1190 1180 PRINT USING " #####.####",E(J%,K%); 1190 NEXT K% 1200 PRINT 1210 NEXT J% 1220 PRINT 1230 IF C2%<=6% GOTO 1500 1240 C2%=C2%-6% 1250 C1%=C1%+6% 1260 GOTO 1125 1500 PRINT ! & ! & ! & ! THIS SECTION PRINTS THE PREVIOUSLY COMPUTED CHI SQUARE AND & ! RELATED INFORMATION. & ! & ! & 1501 IF L5%<=0% GOTO 1505 1502 PRINT L5%;" CELLS HAVE AN EXPECTED FREQUENCY" 1503 PRINT "GREATER THAN 0 AND LESS THAN 5." 1504 PRINT "THE COMPUTED CHI-SQUARE THEREFORE MAY NOT BE MEANINGFUL" 1505 IF L6%=0% GOTO 1509 1506 PRINT "(";L6%;" ROWS AND/OR COLUMNS HAVE ALL 0 ENTRIES" 1507 PRINT "AND HAVE BEEN DISREGARDED IN THIS CALCULATION)" 1509 PRINT 1510 PRINT "CHI-SQUARE.........."; 1515 PRINT USING " ###.#####",X2 1520 PRINT "DEGREES OF FREEDOM.."; 1525 PRINT USING " #####",D% 1530 PRINT 2000 PRINT 2099 ! & ! & ! & ! HERE THE G ARRAY, WHICH HOLDS ALL THE FREQUENCY COUNTS FOR & ! THE CROSS TABLE, IS INITIALIZED IN CASE THE USER WANTS TO & ! COMPUTE MORE CROSS-TABULATION. & ! & ! & 2100 FOR I%=0% TO 10% 2110 G(I%,J%)=0 FOR J%=0% TO 10% 2120 NEXT I% 2199 ! & ! & ! & ! THIS SECTION EITHER RETURNS CONTROL TO STATCM OR TRANSFERS & ! BACK UP FOR MORE CROSS-TABULATION. & ! & ! & 2200 INPUT "DO YOU WISH TO COMPUTE MORE CROSS-TABULATION ";W$ & ! & \ PRINT 2210 IF LEFT(W$,1%)="Y" GOTO 170 2222 IF LEFT(W$,1%)="N" OR W$="" GOTO 2400 2230 PRINT "YOU MUST ANSWER EITHER YES OR NO" 2240 GOTO 2200 2400 CLOSE 3,4 2500 !R$=SYS(CHR$(8)+F$) & \ SAV.F$ = F$ 2510 !CHAIN "STATCM"+A9$ & \ MODULE$= "STATCM" & \ LINE% = 0% & \ SUBEXIT & 2999 ! & ! & ! & ! N IS THE GRAND TOTAL COUNT. IT IS THE NUMBER OF DATA POINTS & ! COUNTED IN THE CROSS TABLE. IT WILL BE EQUAL TO R%, SO THERE & ! IS REALLY NO NEED TO SUM IT UP SEPARATELY HERE. & ! & ! & 3000 PRINT & \ PRINT 3020 DIM E(10%,10%) 3045 N=0 3050 FOR I%=0% TO I1%-1% 3060 N=N+G(J%,I%) FOR J%=0% TO I2%-1% 3070 NEXT I% 3079 ! & ! & ! & ! IF THE USER ANSWERS NO TO THE CHI-SQUARE QUESTION, THEN HE IS & ! NOT ASKED IF HE WANTS TO SEE THE EXPECTED FREQUENCIES. & ! & ! & 3080 INPUT "DO YOU WISH TO COMPUTE CHI-SQUARE FOR THE ABOVE TABLE ";W$ & ! & \ PRINT 3085 IF LEFT(W$,1%)="Y" GOTO 1020 3090 IF LEFT(W$,1%)="N" OR W$="" GOTO 2200 3095 PRINT "YOU MUST ANSWER EITHER YES OR NO" 3097 GOTO 3080 3099 ! & ! & ! & ! THESE ERROR ROUTINES ARE FOR THE TERMINAL QUESTION AND ANSWER & ! ROUTINES. & ! & ! & 09000 IF ERR=28% THEN GOSUB 10000 & !\ RESUME 2200 & \ MODULE$ = "FINISH" & \ GOTO 32750 09010 IF ERR>49% AND ERR<53% & THEN PRINT "YOU TYPED NON-NUMERIC CHARACTERS. PLEASE TRY AGAIN." & \ IF ERL=235 & THEN RESUME 245 & ELSE IF ERL=265 & THEN RESUME 280 & ELSE RESUME 200 09020 ON ERROR GOTO 0 10000 V0%=CTRLC ! SYS(CHR$(6%)+CHR$(-7%)) & \ RETURN ! CTRL/C TRAP 32750 SUBEND