1 ! 500.26 - STAT11 - SCATTE SCATTER DIAGRAM 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 PRINTS A SCATTER DIAGRAM (X VS.Y) 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: THIS IS THE NAME OF THE 250 ROW BY 15 COLUMN VIRTUAL DATA MATRIX USED BY ALL STAT11 MODULES. 13 ! 2) VARIABLE NAME: F4$ RANGE OF VALUES: S00000.ESF - S99999.ESF USE: THIS IS THE NAME OF THE FILE THAT CONTAINS ELEMENTARY STATISTICS 15 ! 3) VARIABLE NAME: R% RANGE OF VALUES: 1 - 250 USE: CONTAINS THE NUMBER OF ROWS OF ACTUAL DATA IN MATRIX F3$ 17 ! 4) VARIABLE NAME: C% RANGE OF VALUES: 1 - 15 USE: CONTAINS THE NUMBER OF COLUMNS OF ACTUAL DATA IN MATRIX F3$ 20 ! RETURNING ARGUMENTS NONE -- THIS MODULE DOES NOT ALTER OR ADD TO ANY OF THE FILES OR VARIABLES PASSED TO IT. 30 ! DESCRIPTION OF FUNCTION THIS MODULE PRINTS A SCATTER DIAGRAM (X VS. Y) FOR ANY TWO VARIABLES IN THE DATA MATRIX. 31 ! IT FIRST ASKS THE USER TO ENTER THE HORIZONTAL AND VERTICAL VARIABLE NUMBERS AND THEN USES THOSE NUMBERS AND THE ELEMENTARY STATISTICS TO COMPUTE THE LIMITS AND INTERVALS FOR THE DIAGRAM. 32 ! AFTER TRANSFERING THE VARIABLES FROM THE DATA MATRIX TO A TEMPORARY ARRAY, IT SORTS THE VERTICAL DATA POINTS IN DECREASING ORDER OF MAGNITUDE, KEEPING HORIZONTAL DATA POINTS MATCHING. 33 ! IT THEN PRINTS THE SCATTER DIAGRAM, USING ONE PRINTLINE FOR EACH VERTICAL INTERVAL. 34 ! FINALLY, IT ASKS THE USER IF HE WANTS ANOTHER SCATTER DIAGRAM. IF HE DOESN'T, IT CHAINS TO STATCM. 35 ! 95 ! THIS FIRST SECTION OPENS THE DATA AND ELEMENTARY STATISTICS FILES AND ASKS THE USER TO ENTER THE HORIZONTAL AND VERTICAL VARIABLES FOR THE SCATTER DIAGRAM. 100 ON ERROR GOTO 915: GOSUB 10000: DIM X(250%),Y(250%),D$(60%) 110 F$=SYS(CHR$(7)) 115 A9$=MID(F$,62%,9%): A9$=LEFT(A9$,INSTR(5%,A9$,"]")): H9=.9E-38 120 R%=VAL(MID(F$,46%,5%)) 130 C%=VAL(MID(F$,51%,5%)) 140 F3$=MID(F$,31%,15%) 150 F4$=LEFT(F3$+" ",6%)+".ESF" 160 OPEN F3$ FOR INPUT AS FILE 3 170 DIM #3,A(250%,15%) 180 OPEN F4$ FOR INPUT AS FILE 4 190 DIM #4,S(10%,15%) 200 PRINT "ENTER X(HORIZONTAL) AND Y(VERTICAL) VARIABLES " 210 INPUT "SEPARATE X AND Y WITH A COMMA"; X%,Y%: PRINT 220 IF X%>=1% AND X%<=C% AND Y%>=1% AND Y%<=C% GOTO 240 225 PRINT "YOUR VARIABLE NUMBERS MUST BE BETWEEN 1 AND"; C% 230 GOTO 200 235 ! THIS SECTION COMPUTES THE LIMITS AND INTERVALS FOR THE DIAGRAM, MAKING ONE VERTICAL INTERVAL CORRESPOND TO ONE PRINTLINE. 240 ! 250 U=(S(1%,X%)-S(2%,X%))/30 260 X1=S(2%,X%)-U: X9=S(1%,X%)+U 270 V=(S(1%,Y%)-S(2%,Y%))/18 280 Y1=S(2%,Y%)-V: Y9=S(1%,Y%)+V 290 X5=(X9-X1)/60 : Y5=(Y9-Y1)/36 292 IF U<>0 AND V<>0 GOTO 300 294 IF U=0 THEN PRINT "*** VARIABLE NUMBER";X%;" IS A CONSTANT***" 296 IF V=0 THEN PRINT "*** VARIABLE NUMBER";Y%;" IS A CONSTANT***" 298 PRINT 299 GOTO 950 ! NEXT THE USER IS ASKED TO ENTER A PLOT SYMBOL; THE DEFAULT CHARACTER IS AN ASTERISK. 300 INPUT "TYPE A PLOT SYMBOL IN THE FORM X ";P$ 305 P$=LEFT(P$+"*",1%) : PRINT : PRINT 309 ! HERE THE DATA IS TRANSFERRED FROM THE INPUT MATRIX TO TEMPORARY X(J%) AND Y(J%) MATRICES. 310 J1%=0%: FOR J%=1% TO R% 315 IF A(J%,X%)=H9 OR A(J%,Y%)=H9 GOTO 330 320 J1%=J1%+1%: X(J1%)=A(J%,X%): Y(J1%)=A(J%,Y%) 330 NEXT J%: IF J1%=0% THEN PRINT "NO DATA EXISTS FOR THESE"; " VARIABLES": GOTO 950 399 ! HERE THE Y'S ARE SORTED IN DECREASING ORDER OF MAGNITUDE USING AN INTERCHANGE SORT. THE X'S ARE KEPT MATCHING WITH CORRESPONDING Y'S; I.E., IF Y(2) AND Y(3) ARE INTERCHANGED, THEN X(2) AND X(3) ARE INTERCHANGED, ALSO. 400 T9%=J1%-1% 410 FOR K%=1% TO J1% 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% 590 ! HERE THE SCATTER DIAGRAM IS PRINTED. FOR EACH LINE CORRESPONDING TO Y POSITION(S), THE ASSOCIATED X POSITION(S) ARE FILLED IN WITH THE PRINT CHARACTER, AND THE LINE IS PRINTED. 600 V1=Y9: N%=1% 610 FOR J%=0% TO 35% 620 IF J%-(J%/6%)*6%<>0% GOTO 660 630 PRINT USING "######.###",V1; 640 PRINT " +"; 650 GOTO 670 660 PRINT " ."; 670 D$(I%)=" " FOR I%=0% TO 60% 680 IF N%>J1% GOTO 800 690 IF Y(N%)