! DATAIN, SAMSTAT DRIVER MODULE ON ERROR GOTO <> DIM #1,A(250,15) \ DIM #2,Q(250,15) \ & DIM #3,B(250,15) \ COM V(7,15) \ & DIM #5,W(250,15) H9=.9E-38 ! TYPE IN DATA SET NAMES MAXR=250 MAXC=15 <<*LAB>> PRINT \ & PRINT "SAMSTAT ";TIME$(0);" ";DATE$(0) <<*IN1>> PRINT "PLEASE ENTER NAMES OF INPUT AND OUTPUT FILES" \ & PRINT "FORM: IN,OUT ( *,OUT DENOTES DATA ENTRY MODE)" \ & INPUT "-> ";F1$,F2$ PRINT F2$="SY:"+F2$ F3$="SY:S"+LEFT(MID(NUM$(TIME(0)),2,5)+"00000",5)+".RWM" F5$=MID(F3$,1,9)+".TMP" IS=0 ! OPEN FILES IF F1$="*" GOTO <> F1$="SY:"+F1$ OPEN F1$ FOR INPUT AS FILE #1, VIRTUAL ! INPUT NR=A(0,0) NC=A(1,0) IF A(0,0)-NR<>0. OR A(1,0)-NC<>0. GOTO <> IF NR>0 AND NR<=MAXR AND NC>0 AND NC<=MAXC GOTO <> <<*PR1>> PRINT "INPUT DATA FILE NOT CREATED BY SAMSTAT. TRY AGAIN" GOTO <> <<*OK1>> OPEN F2$ FOR OUTPUT AS FILE #2, VIRTUAL,CONTIGUOUS ISAVE=0 OPEN F3$ FOR OUTPUT AS FILE #3, VIRTUAL,CONTIGUOUS OPEN F5$ FOR OUTPUT AS FILE #5, VIRTUAL,CONTIGUOUS B(0,K)=0. FOR K=1 TO NC <<*CH1>> IF F1$="*" GOTO <> ! DATA MOVED FROM OLD FILE TO TEMPORARY FOR J=0 TO NR B(J,K)=A(J,K) FOR K=0 TO NC NEXT J CLOSE 1 B(0,0)=NR \ & B(1,0)=NC \ & PRINT \ & L$=RIGHT(F1$,4) \ & PRINT L$;" CONTAINS";NR;" ROWS AND";NC;" COLUMNS OF DATA" \ & PRINT \ & GO TO <> ! ENTER INITIAL DATA <<*NRC>> PRINT "TYPE NUMBERS OF ROWS AND COLUMNS OF DATA." INPUT "FORM (ROWS,COLUMNS)";NR,NC IF NR>0 AND NR<=MAXR AND NC>0 AND NC<=MAXC GOTO <> PRINT "NUMBER OF ROWS MUST BE BETWEEN 1 AND";MAXR \ & PRINT "NUMBER OF COLUMNS MUST BE BETWEEN 1 AND";MAXC;". TRY AGAIN" GOTO <> <<*DAT>> PRINT \ & PRINT "IF YOU HAVE MISSING DATA, TYPE X WHERE THESE VALUES"; & " WOULD NORMALLY OCCUR" \ & PRINT "ENTER";NR;" ROWS, ONE AT A TIME" B(0,K)=0. FOR K=1 TO NC ON ERROR GOTO <> FOR J=1 TO NR PRINT USING "ROW ###",J; IZ=1 <<*NXL>> INPUT LINE L$ ! REMOVE CARRIAGE RETURN (2 CHARS) AND ADD COMMA L$=LEFT(L$,LEN(L$)-2)+"," FOR K=1 TO NC <<*NXK>> IZ=INSTR(1,L$,",") IF IZ=0 THEN PRINT "TYPE MORE DATA" \ INPUT LINE L$ \ & L$=LEFT(L$,LEN(L$)-2)+"," \ GOTO <> IF IZ=1 OR LEFT(L$,IZ-1)="X" THEN B(J,K)=H9 ELSE & B(J,K)=VAL(LEFT(L$,IZ-1)) \ B(0,K)=B(0,K)+1. <<*NXV>> L$=RIGHT(L$,IZ+1) NEXT K NEXT J ON ERROR GOTO <> B(0,0)=NR \ & B(1,0)=NC \ & PRINT \ & GOTO <> ! ERROR SUB FOR TYPING INPUT DATA LINES <<*ERT>> IF LEFT(L$,IZ-1)="" THEN B(J,K)=H9 \ RESUME <> PRINT "YOU TYPED IN NON-NUMERICS FOR YOUR DATA" \ & PRINT "PLEASE TYPE ONLY NUMBERS, SEPARATED BY COMMAS" \ & PRINT "YOU MUST RE-TYPE THE ENTIRE ROW (";NC;" VALUES)" \ & RESUME <> ! PRINT DATA <<*PR2>> PRINT "ENTER PRINT OPTION" INPUT " (0=NO PRINT, 1=ENTIRE MATRIX, 2=SUBMATRIX)";N ON N+1 GOTO <>,<>,<> <<*PRB>> PRINT "PLEASE TRY AGAIN; TYPE ONLY 0, 1 OR 2" \ & GO TO <> <<*ALL>> NC1,NC8,NR1=1 \ NC2,NC9=NC \ NR2=NR GOTO <> <<*SUB>> IS=1 INPUT "TYPE FIRST ROW, LAST ROW TO PRINT";NR1,NR2 IF NR1>=1 AND NR1<=NR AND NR2>=NR1 AND NR2<=NR GOTO <> PRINT "ROW NUMBERS MUST BE BETWEEN 1 AND";NR \ & PRINT "PLEASE TRY AGAIN " \ & GO TO <> <<*COL>> IS=2 INPUT "TYPE FIRST COLUMN, LAST COLUMN TO PRINT";NC1,NC2 IF NC1>=1 AND NC1<=NC AND NC2>=NC1 AND NC2<=NC GOTO <> PRINT "COLUMN NUMBERS MUST BE BETWEEN 1 AND";NC \ & PRINT "PLEASE TRY AGAIN" \ & GOTO <> <<*ESU>> NC8=NC1 \ & NC9=NC2 \ & PRINT \ & IS=0 <<*PR3>> IF (NC9-NC8)>5 THEN NC9=NC8+5 PRINT \ PRINT "ROW";TAB(35);"COLUMN" \ PRINT I=10 FOR K=NC8 TO NC9 PRINT TAB(I);K; I=I+11 NEXT K PRINT FOR I=NR1 TO NR2 PRINT USING "### ",I; FOR J=NC8 TO NC9 IF B(I,J)=H9 THEN PRINT SPACE$(11); ELSE & PRINT USING " #####.####",B(I,J); NEXT J PRINT NEXT I PRINT \ PRINT IF NC9> ! CALCULATE ELEMENTARY STATISTICS <<*NOP>> IT=0 CALL ESCRWM(F2$,NR,NC,IT,ISAVE) IF IT>=3 GO TO <> <<*PRH>> PRINT "TYPE 'HELP' FOR A LIST OF ANALYSIS CODES" <<*PRR>> PRINT "ENTER ANALYSIS TO BE PERFORMED" INPUT LINE A1$ PRINT A1$=LEFT(A1$,LEN(A1$)-2) \ & A$=LEFT(A1$+" ",6) IF A$<>"HELP " GOTO <> ! HELP FILE FOR ANAYSIS CODES PRINT "ANALYSIS CODE" \ PRINT \ & PRINT "EDIT/PRINT DATA EDIT" \ & PRINT "TRANSFORMATION TRANS" \ & PRINT "ELEMENTARY STATISTICS ELEM" \ & PRINT "CROSS TABULATION CROSS" \ & PRINT "RANK CORRELATION RANK" \ & PRINT "CORRELATION CORR" \ & PRINT "CHI-SQUARED CHI" \ & PRINT "T-TEST T" \ & PRINT "ANALYSIS OF VARIANCE ANOVA" \ & PRINT "REGRESSION REG" \ & PRINT "STEPWISE/MULTIPLE STEP" \ & PRINT "SCATTER DIAGRAM SCAT" \ & PRINT "HISTOGRAM HIST" \ & PRINT "**END THIS SESSION** EXIT" \ PRINT \ & GOTO <> <<*SEL>> IF A$="EXIT " THEN IT=0 \ GOTO <> IF A$="EDIT " THEN IT=1 \ GOTO <> IF A$="TRANS " THEN IT=2 \ GOTO <> IF A$="REG " THEN CALL REGRES(NR,NC,IT) \ IF IT=5 THEN & GOTO <> ELSE GOTO <> IF A$="ELEM " THEN CALL ELEMEN(NR,NC) \ GOTO <> IF A$="CROSS " THEN CALL CROSS0(NR,NC) \ GOTO <> IF A$="RANK " THEN CALL RANK0C(NR,NC) \ GOTO <> IF A$="CORR " THEN CALL CORREL(NR,NC) \ GOTO <> IF A$="CHI " THEN CALL CHI0SQ(NR,NC) \ GOTO <> IF A$="T " THEN CALL T0TEST(NR,NC) \ GOTO <> IF A$="ANOVA " THEN CALL ANALYS(NR,NC) \ GOTO <> IF A$="STEP " THEN CALL STEPWI(NR,NC) \ GOTO <> IF A$="SCAT " THEN CALL SCATTE(NR,NC) \ GOTO <> IF A$="HIST " THEN CALL HISTOG(NR,NC) \ GOTO <> PRINT "INVALID ANALYSIS CODE - TRY AGAIN"\ & GO TO <> <<*ENS>> IF IT<>0 THEN CALL ESCRWM(F2$,NR,NC,IT,ISAVE) IF IT>0 AND IT<>4 GO TO <> <<*CKF>> KILL F3$ \ & KILL F5$ \ & L$=RIGHT(F2$,4) <<*TSA>> INPUT "DO YOU WANT TO SAVE YOUR OUTPUT FILE (Y/N)";A$ A$=LEFT(A$,1) IF A$="N" THEN KILL F2$ \ GOTO <> IF A$<>"Y" THEN PRINT "YOU MUST TYPE Y OR N. PLEASE TRY AGAIN" \ & GOTO <> <<*TAN>> INPUT "WANT TO BEGIN ANOTHER SESSION (Y/N)",A$ A$=LEFT(A$,1) IF A$="Y" GOTO <> IF A$<>"N" THEN PRINT "YOU MUST TYPE Y OR N. PLEASE TRY AGAIN" \ & GOTO <> PRINT \ PRINT "SAMSTAT RUN ENDED AT ";TIME$(0);" ";DATE$(0) GO TO <> ! ERROR RECOVERY ROUTINE <<*ERD>> PRINT "ERROR CODE";ERR;" ON LINE";ERL IF ERL< <> THEN & PRINT "SAMSTAT IS UNABLE TO USE THE DESIGNATED FILE" \ & PRINT "PLEASE CHECK THE FILE NAME" \ & RESUME <> IF ERL><> AND ERL< <> THEN RESUME <> PRINT "YOU TYPED NON-NUMERIC ROW OR COLUMN NUMBERS" \ & PRINT "PLEASE RETYPE NUMBERS SEPARATED BY A COMMA" IF IS=1 THEN RESUME <> ELSE IF IS=2 THEN RESUME <> RESUME <> <<*EN1>> END