1 !
	500.27 - STAT11 - HISTOG

		HISTOGRAM 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 PROGRAM PRINTS A HISTOGRAM (BAR GRAPH) FOR A VARIABLE.



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

12 !		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.

14 !		2) VARIABLE NAME:	F4$
		   RANGE OF VALUES:	S00000.ESF - S99999.ESF
		   USE:			THIS IS THE NAME OF A FILE THAT
					CONTAINS THE ELEMENTARY STATISTICS
					USED BY MANY STAT11 MODULES.

16 !		3) VARIABLE NAME:	R%
		   RANGE OF VALUES:	1 - 250
		   USE:			CONTAINS THE NUMBER OF ROWS OF
					ACTUAL DATA IN MATRIX F3$

18 !		4) VARIABLE NAME:	C%
		   RANGE OF VALUES:	1 - 15
		   USE:			CONTAINS THE NUMBER OF COLUMNS OF
					ACTUAL DATA IN MATRIX F3$

20 !


	RETURNING ARGUMENTS

22 !		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 HISTOGRAM (BAR GRAPH) FOR A VARIABLE.

		THE STRATEGY IT EMPLOYS IS AS FOLLOWS:

31 !		FIRST DIVIDE THE RANGE (MAXIMUM - MINIMUM) OF THE VARIABLE
		INTO THE DESIRED NUMBER OF INTERVALS.

32 !		THEN GO DOWN THE COLUMN OF OBSERVATIONS FOR THE VARIABLE
		AND COUNT HOW MANY OBSERVATIONS THERE ARE IN EACH INTERVAL.

33 !		FINALLY, PRINT THE HISTOGRAM. THEN, IF THE USER DOESN'T
		WANT ANY MORE HISTOGRAMS, CHAIN TO STATCM.

34 !














90 !
	THIS SECTION OPENS THE INPUT DATA MATRIX FILE AND THE ELEMENTARY
	STATISTICS FILE.



100	ON ERROR GOTO 9000: GOSUB 10000: F$=SYS(CHR$(7%))
105	A9$=MID(F$,62%,9%): A9$=LEFT(A9$,INSTR(5%,A9$,"]")):
	H9=.9E-38
110  R%=VAL(MID(F$,46%,5%))
120  C%=VAL(MID(F$,51%,5%))
130  F3$=MID(F$,31%,15%)
140  F4$=LEFT(F3$,6%)+".ESF"
150  OPEN F3$ FOR INPUT AS FILE 3
160  DIM #3,A(250%,15%)
170  OPEN F4$ FOR INPUT AS FILE 4
180  DIM #4,S(10%,15%)
183  DIM F%(10%),L(10%)
199 !


	HERE THE USER IS ASKED TO ENTER THE NUMBER OF THE VARIABLE FOR
	WHICH HE WANTS THE HISTOGRAM.



200  PRINT "TYPE THE COLUMN NUMBER OF THE VARIABLE"
202  INPUT "TO BE USED IN THE HISTOGRAM";V%:PRINT
205  IF V%>=1% AND V%<=C% GOTO 215
210  PRINT "YOU MUST SPECIFY A VARIABLE NUMBER BETWEEN 1 AND";C%
212  GOTO 200
215

	! F(I%) WILL HOLD THE FREQUENCY COUNT FOR EACH INTERVAL;
	L(I%) WILL HOLD THE LOWER BOUND OF EACH INTERVAL.  THESE
	ARRAYS ARE INITIALIZED HERE
216  FOR I%=0% TO 10%
217  F%(I%)=0%
218  L(I%)=0
219  NEXT I%     !


	HERE THE USER IS ASKED TO INPUT A PRINT CHARACTER AND THEN THE 
	NUMBER OF INTERVALS HE WANTS IN THE HISTOGRAM.



220  INPUT "TYPE A PRINT CHARACTER FOR THE HISTOGRAM ";C$
230  PRINT
240  C$=LEFT(C$+"*",1%)
250  PRINT "ENTER THE NUMBER OF INTERVALS YOU WANT IN THE HISTOGRAM"
255  INPUT "(MAXIMUM=10)";N%:PRINT
260  IF N%>=1% AND N%<=10% GOTO 290
270  PRINT "THE NUMBER OF INTERVALS YOU SPECIFY MUST BE BETWEEN 1 AND 10"
275  PRINT "PLEASE TRY AGAIN"
280  GOTO 250
289 !


	THIS SECTION SETS EACH L(J%) TO THE LOWER BOUND OF THE J%TH INTERVAL.



290	PRINT: PRINT TAB(15%);"HISTOGRAM FOR VARIABLE";V%
300  PRINT
310  N=N%
320	I=(S(1%,V%)-S(2%,V%))/N
330	M=S(2%,V%)
340	FOR J%=0% TO N%
350  L(J%)=M
360  M=I+L(J%)
370  NEXT J%
380	L(N%)=S(1%,V%)  !  NOTE:  THIS LINE SETS THE UPPER BOUND
		        OF THE LAST INTERVAL
389 !


	THIS CODE COUNTS THE NUMBER OF OBSERVATIONS IN EACH INTERVAL AND
	STORES THESE COUNTS IN THE F% ARRAY.



390	FOR J%=1% TO R%
400	FOR K%=1% TO N%
405	IF A(J%,V%)=H9 GOTO 420
410  IF A(J%,V%)<=L(K%) GOTO 430
420	NEXT K%: GOTO 440
430  F%(K%)=F%(K%)+1%
440  NEXT J%
450  H%=F%(1%)
460  FOR J%=2% TO N%
470  IF F%(J%)>H% THEN H%=F%(J%)
480  NEXT J%
489 !


	THIS CODE PRINTS THE FREQUENCY COUNTS ACROSS THE TOP OF THE GRAPH.



490  PRINT "FREQUENCY";
500  FOR J%=1% TO N%
510  PRINT USING "  ###",F%(J%);
520  NEXT J%
524 !


	THIS SECTION PRINTS THE HISTOGRAM.



525  PRINT
530  PRINT "  --------";
540  PRINT "+----"; FOR J%=1% TO 11%
545  PRINT
550  X%=H%
560  FOR J%=1% TO H%
570  PRINT USING "  ###",X%;
580  PRINT "     ";
590  FOR K%=1% TO N%
600  IF F%(K%)>=X% THEN PRINT "   ";C$;" "; ELSE PRINT "     ";
610  NEXT K%
620  PRINT
630  X%=X%-1%
640  NEXT J%
649 !


	HERE THE BOUNDS FOR THE INTERVALS ARE PRINTED ALONG THE BOTTOM
	OF THE GRAPH.



650  PRINT "  --------";
660  PRINT "+----"; FOR J% = 1% TO 11%
670  PRINT
680  PRINT "    ";
690  FOR J% = 0% TO N% STEP 2%
700  PRINT USING "  ####.###",L(J%);
710  NEXT J%
720  PRINT
730  PRINT "         ";
740  FOR J% = 1% TO N% STEP 2%
750  PRINT USING "  ####.###",L(J%);
760  NEXT J%
769 ! 


	IN THIS LAST SECTION, THE USER IS ASKED IF HE WANTS MORE HISTOGRAMS.
	IF NOT, CONTROL IS TRANSFERRED TO STATCM. ERROR ROUTINES ARE ALSO
	INCLUDED IN THIS SECTION OF CODE.



770  PRINT : PRINT
780  INPUT "DO YOU WISH TO PRINT ANY MORE HISTOGRAMS"; W$
785	IF LEFT(W$,1%)="Y" GOTO 199
790  IF LEFT(W$,1%)="N" OR W$="" GOTO 900
795  PRINT "PLEASE ANSWER YES OR NO": GOTO 780
900  R$=SYS(CHR$(8)+F$)
905	CLOSE 3,4
910  CHAIN "STATCM"+A9$
09000	IF ERR=28% THEN GOSUB 10000: RESUME 900
09010	PRINT "YOU TYPED NON-NUMERIC CHARACTERS.  PLEASE TYPE ONLY"
	: PRINT "NUMBERS WHEN NUMBERS ARE REQUESTED."
	: IF ERL=202 THEN RESUME 210 ELSE IF ERL=255 THEN RESUME 270
09020	ON ERROR GOTO 0
10000	V0$=SYS(CHR$(6%)+CHR$(-7%)): RETURN	! CTRL/C TRAP
32750	END
