1  ! PROGRAM HIST, VERSION 1A (31-AUG-73)
   !
2  ! PROGRAM HIST PRINTS OUT A HISTOGRAM FOR THE VARIABLE SELECTED.
   ! IT IS ONE OF THE SEVERAL PROGRAMS AND FILES WHICH COMPOSE COSAP,
   ! LAWRENCE UNIVERSITY'S CONVERSATIONALLY ORIENTED STATISTICAL
3  ! ANALYSIS PACKAGE.  COSAP IS DISTRIBUTED FOR EDUCATIONAL USE, ON
   ! THE CONDITION THAT IT NOT BE SOLD, RENTED OR LEASED FOR PROFIT.
   !
4  ! IF YOU DESIRE FURTHER INFORMATION ABOUT COSAP, PLEASE CONTACT THE
   ! LAWRENCE UNIVERSITY COMPUTER CENTER, APPLETON, WISCONSIN, 54911.
   !
10 DIM N%(30)  ! FUNCTION TO CREATE FILE EXT. BASED ON JOB#
25 DEF FNZ$ : IF N%(0)=30% THEN 40 
    ELSE CHANGE SYS(CHR$(6)+CHR$(9)+CHR$(0)) TO N% : 
   Z8$=".J"+RIGHT(NUM$(N%(1)/2%),2%)
40 FNZ$=Z8$! EXTENSION IS".J"+JOB #
55 FNEND
70 !****HIST
85 OPEN "DAT1"+FNZ$ AS FILE 1
90 OPEN L1$(1%) FOR INPUT AS FILE 5%
100 DIM#1,X(200,50),H$(30)=2,C(50,50),M4(0),M5(0),M9(0),N(0),J9(0),
          I4(0),I7(0),N6(0),X2(50),L1$(8)=32%
105 DIM #5%, N$(50%)=8%,M1$(50%)=64%,O%(50%),P%(50%),D$(50%)=8%,
        T(50%),D(10000%)
115 DEF FNR(Q)
130 INPUT Z$
145 Q=INSTR(1,Z$,"SOS")
160 IF Q>0 THEN 205 
175 Q=VAL(Z$)
190 GOTO 220 
205 Q=808
220 FNR=Q
235 FNEND
240 PRINT:PRINT"THIS PROGRAM PRINTS OUT A HISTOGRAM."
250 PRINT:PRINT"WHAT IS THE NAME OF THE VARIABLE";:V=FNC%(""):
    IF V<>N6(0) THEN 280
265 PRINT:PRINT"YOU MUST RESPOND WITH THE NAME OF A VARIABLE IN YOUR "
    "DATABANK.":PRINT"COSAP WILL THEN DRAW A HISTOGRAM OF IT.":GOTO 250
280 PRINT:PRINT"TYPE A PRINT CHARACTER FOR THE HISTOGRAM  *";
325 INPUT P$:P$=LEFT(P$,1)
340 B6=X(1,V):S6=B6
355 FOR I=2 TO N(0):IF X(I,V)>=S6 THEN 385 
370 S6=X(I,V)
385 IF X(I,V)<=B6 THEN 400 ELSE B6=X(I,V)
400 NEXT I
415 PRINT:PRINT"SPECIFY THE NUMBER OF INTERVALS. MAXIMUM IS 10 *";
430 INPUT I9:IF 10>=I9 THEN 460 
445 PRINT:PRINT"THAT IS TOO MANY. TRY AGAIN":GOTO 415 
460 S2=(B6-S6)/I9:S3(1)=S6+S2
475 FOR I=2 TO I9-1:S3(I)=S3(I-1)+S2:NEXT I
490 S3(I9)=B6:FOR J=1 TO I9:F9(J)=0 :NEXT J
505 FOR I=1 TO N(0):J%=(X(I,V)-S6)/S2+1:IF I9>=J% THEN 535 
520 J%=I9
535 F9(J%)=F9(J%)+1:NEXT I
550 B6=0:FOR J=1 TO I9:IF F9(J)<=B6 THEN 565 ELSE B6=F9(J)
565 NEXT J:J%=1:IF 50>=B6 THEN 595 ELSE J%=(B6+49)/50
580 PRINT:PRINT"EACH "P$" EQUALS "J%" POINTS."
595 PRINT:PRINT"FREQUENCY";
610 PRINTUSING"#####",F9(L);FOR L=1 TO I9
625 PRINT
640 Q$="--------+----+----+----+----+----+----+----+----+----+----+---"
645 PRINT Q$
655 B6%=B6/J% : B6=B6%:FOR I=1 TO B6 :P1=B6-(I-1):FOR J=1 TO I9
670 I$(J)=" ":IF F9(J)/J%<P1 THEN 700 
685 I$(J)=P$:T1=J
700 NEXT J
715 P1=P1*J%:PRINTUSING"#####",P1;
730 PRINT TAB(L*5+8);I$(L);FOR L=1 TO T1
745 PRINT
760 NEXT I
775 PRINT Q$
790 PRINT TAB(4);:PRINTUSING"######.###",S3(L);FOR L=1 TO I9 STEP 2
805 PRINT
820 PRINT TAB(9);:PRINTUSING"######.###",S3(L);FOR L=2 TO I9 STEP 2
835 PRINT:PRINT:PRINT
850 PRINT"DO YOU WISH ANOTHER HISTOGRAM";:INPUT N$
865 IF N$="YES" THEN 250 ELSE IF N$<>"SOS" THEN 895 
880 PRINT"YOU MAY USE ANOTHER VARIABLE"
895 CLOSE 1,5% :K$=SYS(CHR$(7))
910 N$=LEFT(K$,8):S0=VAL(RIGHT(K$,9))
925 CHAIN N$  S0
30000 DEF FNC%(X$)
      ! FUNCTION  TO TRANSLATE VARIABLE NAMES
30010 PRINT X$; UNLESS X$="" : INPUT V$ : IF V$="" THEN PRINT :
      PRINT "VARIABLE NAME NEEDED "; : GOTO 30010
30020 GOTO 30040 IF V$=N$(I%) FOR I%=1% TO O%(0%)
30025 IF LEFT(V$,3%)="SOS" THEN FNC%=808 : GOTO 30050
30030 PRINT "*NO SUCH VARIABLE*  TRY AGAIN." : GOTO 30010
30040 FNC%=I%
30050 FNEND
32767 END
