1 ! PROGRAM CANO, VERSION 1A (31-AUG-73) ! 2 ! PROGRAM CANO IS THE CONTROL PROGRAM FOR CANONICAL CORRELATION. ! 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 85 OPEN "DAT1"+FNZ$ AS FILE 1 100 OPEN "DISC2"+FNZ$ AS FILE 2 115 OPEN "DISC1"+FNZ$ AS FILE 3 120 OPEN L1$(1%) FOR INPUT AS FILE 5% 130 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% 145 DIM#2,N2(50),M2(50),T9(0),L6(0),G9(0),L1(0) 160 DIM #3,R(50,50),X3(50,50),F9(50),S(50) 165 DIM #5%, N$(50%)=8%,M1$(50%)=64%,O%(50%),P%(50%),D$(50%)=8%, T(50%),D(10000%) 175 DIM V9(24) 180 R(I,J)=0 FOR J=1 TO 50 FOR I=1 TO 50 190 DEF FNR(Q) 205 INPUT Z$ 220 Q=INSTR(1,Z$,"SOS") 235 IF Q>0 THEN 280 250 Q=VAL(Z$) 265 GOTO 295 280 Q=808 295 FNR=Q 310 FNEND 325 PRINT:PRINT"THIS PROGRAM COMPUTES CANONICAL CORRELATIONS.":PRINT: PRINT"SPECIFY THE NUMBER OF VARIABLES IN THE LARGER SET"; 340 L6=FNR(Q) 355 IF L6<>N6(0) THEN 400 370 PRINT:PRINT"IT DOES NOT MATTER IF THE LARGER SET IS THE LEFT HAND OR THE RIGHT" 385 PRINT"HAND SET.":GOTO 325 400 PRINT:PRINT"SPECIFY THESE "L6" VARIABLES *" 405 V9(I)=FNC%("VAR. "+NUM$(I)) FOR I=1 TO L6 415 PRINT:PRINT"SPECIFY THE NUMBER OF VARIABLES IN THE SMALLER SET"; 430 S6=FNR(Q) 475 IF S6>1 THEN 510 490 PRINT:PRINT"YOU NEED AT LEAST TWO VARIABLES IN THE SMALLER SET." "TRY AGAIN." 505 GOTO 325 510IF S6<>N6(0) THEN GOTO 520 ELSE PRINT"IT DOES NOT MATTER IF THE SMALLER SET IS THE LEFT HAND SET" 515 PRINT"OR THE RIGHT HAND SET":GOTO325 520 IF M9(0)>=S6+L6 THEN 565 535 PRINT:PRINT"THE NUMBER OF VARIABLES YOU SPECIFIED EXCEEDS THE TOTAL NUMBER. TRY AGAIN." 550 GOTO 325 565 PRINT : PRINT "SPECIFY THESE "S6" VARIABLES. *" 570 V9(I+L6)=FNC%("VAR. "+NUM$(I)) FOR I=1 TO S6 580 FOR J=1 TO L6+S6:L=V9(J):FOR I=1 TO L6+S6:K=V9(I) 595 R(I,J)=C(K,L):NEXT I: NEXT J 610 FOR I=1 TO L6+S6: S(I)=SQR(R(I,I)):NEXT I 625 N3=0:FOR I= 1 TO L6+S6:FOR J=I TO L6+S6:R9=S(I)*S(J) 640 IF R9>0 THEN 670 655 R(I,J)=0:N3=2:GOTO 700 670 R(I,J)=R(I,J)/R9:IF I>=J THEN 700 685 IF .99>R(I,J) THEN 700ELSEN3=2 700 R(J,I)=R(I,J):NEXT J: NEXT I 715 IF N3<=0 THEN 760 730 PRINT:PRINT"SOME VARIABLES ARE HIGHLY CORRELATED OR CONSTANTS." 745 PRINT"CALCULATIONS CANNOT BE CONTINUED!!!!" 760 PRINT:PRINT"DO YOU WISH TO SEE THE CORRELATION MATRIX";:INPUT N$ 775 IF N$="YES" THEN 820 ELSEIF N$<>"SOS" THEN 880 790 PRINT:PRINT"IF YOU ANSWER 'YES' A "L6+S6" BY "L6+S6" MATRIX WILL BE PRINTED" 805 GOTO 760 820 PRINT:FOR I=1 TO L6+S6:L=V9(I) 835 PRINT "ROW "I" (VARIABLE "N$(L)")" 850 PRINTUSING"###.####",R(I,J);FOR J=1 TO L6+S6 865 PRINT:NEXT I 880 IF N3>0 THEN 1000 895 L6(0)=L6:T9(0)=S6 910 CLOSE 1,2,3,5% 925 S$=" FQSC 0010":K$=SYS(CHR$(8)+S$) 940 CHAIN "INVE" 955 OPEN "DAT1"+FNZ$ AS FILE 1 970 OPEN "DISC2"+FNZ$ AS FILE 2 985 OPEN "DISC1"+FNZ$ AS FILE 3 990 OPEN L1$(1%) FOR INPUT AS FILE 5% 1000 PRINT:PRINT"DO YOU WISH TO PERFORM FURTHER ANALYSIS";:INPUT N$ 1015 IF N$="YES" THEN 325 ELSEIF N$<>"SOS" THEN 1060 1030 IF N$<>"SOS" THEN 1060 1045 PRINT:PRINT"YOU MAY USE DIFFERENT VARIABLES":GOTO 1000 1060 KILL"DISC2"+FNZ$ :KILL"DISC1"+FNZ$ 1075 S$=" COSAP 0640":K$=SYS(CHR$(8)+S$) 1090 CLOSE 1,5% 1105 CHAIN "COSAP" 0640 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