75 IF ASUB=2 AND T(NS1)<>T(NS2) THEN PRINT:PRINT "These 2 samples do not have the same number of elements----":PRINT TAB(35);"a signed rank test cannot be performed.":GOTO 580
90 RETURN
95 PRINT TAB(23);"WILCOXON RANK SUM TEST (two-tailed)":PRINT TAB(23);STRING$(35,205):PRINT
100 IF FILE$="" THEN PRINT ELSE GOSUB 60:N=T(NS1)+T(NS2):GOTO 130
105 DQ="Enter the NUMBER of observations in Sample ":PRINT TAB(16);DQ;"#1:":AR=5:AC=64:GOSUB 4800:N1=VAL(IP$)
225 BF=4:WT=0:FT=0:CB=0:CF=0:FOR Z=1 TO N1:C(Z)=0:CF(Z)=0:NEXT
230 IF N1<4 THEN 290
235 IF T-CF<=N2-CB THEN CT=T-CF+1:CK=0:GOTO 275
240 CX=N2-CB+1:CD=T-CF-CX+1:CE=CX-CD:CK=INT(CD*0.5+0.5):IF CD<=CX THEN 265
245 CE=0:CJ=CD:CD=CX:IF CK>CX THEN CK=CX
250 FOR Z=1 TO CK:WT=WT+CD*0.5*(CX+CE+1)+INT((CE*(CE+2)+1)*0.25)
255 CX=CX-1:CJ=CJ-2:IF CJ>=CX THEN CD=CX ELSE CD=CJ
260 CE=CX-CD:NEXT Z:GOTO 270
265 FOR Z=1 TO CK:WT=WT+CD*0.5*(CX+CE+1)+INT((CE*(CE+2)+1)*0.25):CX=CX-1:CD=CD-2:CE=CE+1:NEXT Z
270 CT=T+1-CF-3*CK
275 FOR Z=1 TO INT(CT/3+0.7):WT=WT+INT((CT*(CT+2)+1)*0.25):CT=CT-3:NEXT Z:CF=CF+4
280 IF CF>T THEN BF=BF+1:IF BF>N1 THEN 310 ELSE CF(BF)=CF(BF)+BF:CF=CF(BF):GOTO 280
285 C(BF)=C(BF)+1:FOR Z=2 TO BF:C(Z)=C(BF):CF(Z)=CF:NEXT Z:BF=4:CB=C(4):CF=CF(4):GOTO 235
290 BF=N1-1:CT=T-CF(BF)+1:CX=N2-C(BF)+1:IF CT<=CX THEN WT=WT+CT ELSE WT=WT+CX
295 CF(BF)=CF(BF)+N1+1-BF
300 IF CF(BF)>T OR C(BF)>=N2 THEN BF=BF-1:IF BF<1 THEN 310 ELSE CF(BF)=CF(BF)+N1+1-BF:GOTO 300
305 C(BF)=C(BF)+1:FOR Z=BF+1 TO 2:C(Z)=C(BF):CF(Z)=CF(BF):NEXT Z:GOTO 290
310 FT=N:FOR Z=N1 TO 2 STEP -1:N=N-1:FT=FT*N/Z:IF FT>1E+35 THEN 320
315 NEXT Z:P=WT*2/FT:GOTO 565
320 FT=LOG(FT):FOR Z=Z-1 TO 2 STEP -1:N=N-1:FT=FT+LOG(N/Z):NEXT Z
325 P=EXP(LOG(2*WT)-FT):GOTO 565
330 PRINT TAB(26);"SIGNED RANK TEST (two-tailed)":PRINT TAB(26);STRING$(29,205):PRINT
335 IF FILE$="" THEN PRINT ELSE GOSUB 60:GOSUB 375:GOTO 380
340 LOCATE 5,12:PRINT "Enter the NUMBER of non-zero differences ranked:":AR=5:AC=62:GOSUB 4800:N=VAL(IP$)
345 ERASE C,CF:DIM C(N),CF(N):DQ="Enter the SUM of "
350 LOCATE 7,21:PRINT DQ;"negative signed ranks:":AR=7:GOSUB 4800:NN=VAL(IP$)
355 PRINT TAB(21);DQ;"positive signed ranks:":AR=8:GOSUB 4800:NP=VAL(IP$)
360 IF ABS(NN)<=NP THEN T=ABS(NN) ELSE T=NP
365 IF ABS(NN)+NP=N*(N+1)*0.5 THEN 455 ELSE BEEP:LOCATE 25,1:PRINT "The SUM of the absolute values of positive and negative ranks should = ";N*(N+1)*0.5;:GOTO 350
580 DQ="Do you want to perform another rank test ":LOCATE 25,9:PRINT DQ;
585 IF FILE$="" THEN PRINT "? (Y or N) ";ELSE PRINT "using this datafile? ";
590 INPUT;"",A$:IF A$="y" OR A$="Y" THEN CLS:GOTO 40
595 IF FILE$<>"" THEN LOCATE 25,7:PRINT DQ;:INPUT "using a different datafile? ",A$:IF A$="y" OR A$="Y" THEN 20
605 GOTO 3000
4010 IF FILE$="" THEN 40
4025 ERASE D,CS,T,N$,X,X2,MD,SD,SR,C,CF
4030 DIM D(A,C),CS(A,C+5),SR(3,C*2+1),N$(A),X(A),X2(A),T(A),SD(A),MD(A),C(C),CF(C)
5000 BEEP:IF ERR<>53 AND ERR<>71 THEN 5010 ELSE LOCATE 2,10:PRINT "Please place EPISTAT in drive A: (or other default).":PRINT TAB(25);"Press any key to continue:"