Estadística en Microcomputadores/Archivos BASIC/ESTAD1
10 ' ESTAD1 - Revision 19/4/89
20 GOSUB 1000
25 IF ITE>0 THEN CHAIN "ESTAD"+RIGHT$(STR$(ITE),1)
50 CHAIN "ESTAD"
200 ' EST91 Definicion de Variables
205 ' ---------------------------
210 GOSUB 500
215 IF NV=0 THEN 265
220 PRINT
225 GOSUB 730
255 INPUT " Definicion de Nuevas Variables ? (N) = ",A$
260 IF A$<>"S" AND A$<>"s" THEN RETURN
265 PRINT
270 K=0
273 IF KNV=0 THEN KNV=NC
275 WHILE K<=KNV-1
280 K=K+1 : NV=K
290 PRINT " Variable Nro.";K; : INPUT "= ",A$
295 IF LEN(A$)=0 AND K=1 THEN NV=0 : RETURN
300 IF LEN(A$)=0 THEN NV=K-1 : K=KNV : GOTO 320
305 J=VAL(A$)
310 IF J<1 OR J>NC THEN KE=4 : GOSUB 900 : GOTO 290
311 IF K=1 THEN 318
312 FOR M=1 TO K-1
313 IF J=JX(M) THEN PRINT CHR$(7) : PRINT :
INPUT "** VARIABLE REPETIDA",A$ : PRINT : GOTO 290
315 NEXT M
318 JX(K)=J
320 WEND
324 IF KDA=1 THEN JF=0 : KDA=0 : NX=NF : RETURN
325 PRINT
330 INPUT " Variable para Observaciones Agrupadas (No) = ",A$
335 IF LEN(A$)=0 THEN JF=0 : GOTO 350
340 JF=VAL(A$)
345 IF JF<1 OR JF>NC THEN KE=4 : GOSUB 900 : GOTO 330
347 IF JF=0 THEN NX=NF : RETURN
350 KE=0 : NX=0
355 FOR I=1 TO NF
370 ND=1 : IF JF>0 THEN ND=A(I,JF)
372 IF ND=XVF THEN 380
373 IF ND<0 THEN KE=1
375 NX=NX+ND
380 NEXT I
383 IF KE=1 THEN PRINT : PRINT CHR$(7) : PRINT "** VALOR <0 EN VARIABLE";JF; :
INPUT "",A$ : GOTO 325
385 RETURN
390 ' EST92 - Seleccion de Variable
395 ' ----------------------------
400 J=0
405 IF NC=0 OR KVA=1 THEN KVA=0 : GOTO 412
410 GOSUB 500
412 PRINT
415 INPUT " Posicion de Variable a utilizar = ",A$
420 IF LEN(A$)=0 THEN RETURN
425 X=VAL(A$)
430 IF X<1 OR X>NCM THEN KE=4 : GOSUB 900 : GOTO 415
435 IF LEN(TC$(X))=0 OR LEFT$(TC$(X),2)=" " THEN 455
440 PRINT : PRINT " Variable";X;" actual = ",TC$(X)
445 INPUT " Se utiliza ? (N) = ",A$
450 IF A$<>"S" AND A$<>"s" THEN 415
451 PRINT : INPUT " Borrado de Datos existentes ? (N) = ",A$
452 IF A$="S" OR A$="s" THEN FOR I=1 TO NFM : A(I,X)=0 : NEXT I
455 PRINT : PRINT " Nombre de la Variable";X; : INPUT " = ",A$
460 IF LEN(A$)=0 AND TC$(X)<>" " THEN 485
465 IF LEN(A$)=0 OR LEFT$(A$,8)=" " THEN 415
470 TC$(X)=LEFT$(A$,8)
485 IF NC<X THEN NC=X
490 J=X
495 RETURN
500 ' EST93 - Variables en memoria
505 ' ----------------------------
510 PRINT : PRINT " Variables en Memoria" : PRINT
515 I=1
520 FOR L=1 TO NC
525 IF LEFT$(TC$(L),2)=" " THEN 540
530 PRINT TAB(15*I-11);L;"-";TC$(L);
535 I=I+1 : IF I>5 THEN I=1 : PRINT
540 NEXT L
545 PRINT
550 RETURN
555 ' EST94 Encabezamiento Pantallas y Resultados
560 ' -------------------------------------------
565 IF DS$="SCRN:" THEN PRINT CHR$(12);
570 PRINT#3,"Proceso : ";TP$;TAB(70);DATE$
575 IF TSP$>"" THEN PRINT#3,TAB(11);TSP$ ELSE PRINT
577 A$=NA$ : IF NF=0 THEN A$="No hay Datos en Memoria"
580 PRINT#3,"Datos : ";A$;" - ";N$
583 IF JF>0 THEN PRINT#3,TAB(11);"Variable para Observaciones Agrupadas = ";
JF;"-";TC$(JF)
585 IF CD$>"" THEN PRINT#3,TAB(11);"Condicion de Seleccion = ";CD$
590 IF NX>0 THEN PRINT#3,TAB(11);"Numero de Observac.: ";
595 IF NX>0 THEN PRINT#3,"Totales =";NX;
597 IF NXX>0 THEN PRINT#3," / Consideradas =";NXX ELSE PRINT#3,
600 KA=1 : KB=79 : GOSUB 695
605 PRINT#3,
610 RETURN
650 ' EST95 Seleccion de Dispositivo de Salida
655 ' ----------------------------------------
660 CLOSE#3 : KS=0 : DS$="SCRN:"
665 PRINT : INPUT "Salida por Impresora/I/ o a un Archivo/Nombre/ (No) = ",A$
670 IF LEN(A$)=0 THEN OPEN DS$ FOR OUTPUT AS #3 : RETURN
673 KS=1 : DS$="LPT1:"
675 IF A$="i" OR A$="I" THEN OPEN DS$ FOR OUTPUT AS#3 : RETURN
680 DS$=A$
685 OPEN DS$+".TXT" FOR APPEND AS #3
690 RETURN
695 ' EST96 Subrayado
700 ' ---------------
705 PRINT#3,TAB(KA);
710 FOR S=KA TO KB : PRINT#3,TAB(S);"-"; : NEXT S : PRINT#3,
715 RETURN
730 ' EST97 - Variables definidas
735 ' ---------------------------
740 I=1
743 IF KX=0 THEN PRINT#3," Variables ya Definidas" : PRINT#3,
745 IF KX=1 THEN PRINT#3," Variables Consideradas" : PRINT#3,
750 FOR K=1 TO NV
755 J=JX(K)
760 PRINT#3,TAB(15*I-11);J;"-";TC$(J);
765 I=I+1 : IF I>5 THEN I=1 : PRINT#3,
770 NEXT K
773 PRINT#3, : PRINT#3, : KX=0
775 RETURN
900 ' EST99 - SUBRUTINA DE MENSAJES
905 ' -----------------------------
910 PRINT CHR$(7) : PRINT
911 IF KE=1 THEN INPUT "** NO HAY DATOS EN MEMORIA ",A$ : KE=0 : RETURN
912 IF KE=2 THEN INPUT "** NUMERO DE VARIABLES NO ADECUADO PARA EL PROCESO ",A$
- KE=0 : RETURN
915 IF KE=3 THEN INPUT "** NUMERO DE OBSERVAC.INSUFICIENTE PARA EL PROCESO ",A$
- KE=0 : RETURN
928 IF KE=9 THEN INPUT "** PROCESO NO ADECUADO A LOS DATOS CONSIDERADOS ",A$ :
KE=0 : RETURN
929 IF KE=4 THEN INPUT "** VARIABLE NO EXISTENTE O SIN DATOS ",A$ :
KE=0 : RETURN
930 IF KE=5 THEN PRINT "** VALOR ERRONEO - Debe ser ";B$ : INPUT " ",A$ :
KE=0 : RETURN
931 IF KE=6 THEN INPUT "** CAPACIDAD INSUFICIENTE DE MEMORIA DE TRABAJO",A$ :
KE=0 : RETURN
934 INPUT "Valor Erroneo ",A$
935 RETURN
936 IF ERR<>53 THEN PRINT CHR$(7) : PRINT
937 IF ERR<>53 THEN KE=KE+1 : IF KE>1 THEN RESUME 948
938 IF ERR=25 OR ERR=57 OR ERR=68 OR ERR=70 OR ERR=71 THEN PRINT "** DISPOSITIVO ";XDDA$;
" NO DISPONIBLE O ERROR E/S"; : INPUT " ",A$ : RESUME NEXT
939 IF ERR=61 THEN PRINT "** DISCO ";XDDA$;" LLENO" : INPUT " ",A$ : RESUME
940 IF ERR=53 THEN KAR=1 : RESUME NEXT
941 IF ERR=62 THEN PRINT "** FIN DE GRABACION O LECTURA EN DISP. ";XDDA$; : INPUT "
",A$ : RESUME NEXT
942 IF ERR=2 OR ERR=22 THEN PRINT "** ERROR DE SINTAXIS EN FUNCION "; : INPUT "O
CONDICION",A$ : RESUME NEXT
943 IF ERR=24 OR ERR=27 THEN INPUT "** PROBLEMA EN IMPRESORA",A$ : RESUME NEXT
944 IF ERR=64 OR ERR=75 OR ERR=76 THEN INPUT "** NOMBRE INCORRECTO ARCHIVO",A$ : RESUME
947 PRINT "Error";ERR;"en linea";ERL :STOP
948 CHAIN"ESTAD"
950 ' EST98 - Descripcion Archivo
952 ' ---------------------------
954 LD=0
956 IF MID$(A$,2,1)<>":" THEN XDDA$=DDA$+":" : GOTO 964
958 B$=LEFT$(A$,1)
960 'IF INSTR("ABCabc",B$)=0 THEN GOSUB 900 : RETURN
962 XDDA$="" : LD=2
964 B$=RIGHT$(A$,4)
966 IF LEFT$(B$,1)<>"." THEN EXT$=XA$ ELSE EXT$="" : LD=LD+4
968 'IF LEN(A$)-LD>8 THEN GOSUB 900
970 KAR=0 : KE=0
972 OPEN XDDA$+A$+EXT$ FOR INPUT AS#1
974 CLOSE#1
978 RETURN
980 ' EST9. - Presentacion Menu
982 ' -------------------------
983 PRINT : ISP=0 : A$=""
984 FOR K=1 TO KL
986 PRINT " ";K;"- ";TF$(K)
988 NEXT K
990 PRINT : PRINT "Opcion Elegida = ";
991 B$=INPUT$(1) : PRINT B$;
992 IF B$=CHR$(13) THEN 996
993 IF B$=CHR$(27) THEN A$="" : GOTO 996
994 A$=A$+B$ : GOTO 991
996 IF LEN(A$)=0 THEN RETURN
997 ISP=INT(VAL(A$))
998 IF ISP<1 OR ISP>KL THEN PRINT CHR$(7) : GOTO 983
999 RETURN
1000 ' EST1 - Manejo de Datos
1005 ' ----------------------
1010 DEFINT I-N
1015 COMMON ITE,NFM,NCM,A(),TC$(),NC,NF,NX,DDA$,NDE,NV,JX(),P(),DA$,NA$,CD$,
PAR1,PAR2,XVF
1017 ON ERROR GOTO 936
1020 X=2*NFM : IF NCM>X THEN X=NCM
1025 Y=NFM : IF NCM>Y THEN Y=NCM
1030 DIM TCX$(200),TF$(8),VX(X),VY(Y),V(Y),NVC(2),VC(PAR1,2)
1033 DIM ARC$(3),IA(2),IB(2),NFT(2),NCT(2),NIJ(2),NVS(2)
1035 DEF FNR(X,DE)=INT(10^DE*X+.5)/10^DE
1040 CLOSE : DS$="SCRN:" : OPEN DS$ FOR OUTPUT AS#3
1045 WHILE KW=0
1050 TP$="MANEJO DE DATOS" : TSP$=""
1055 NXX=0
1060 GOSUB 555
1065 PRINT TAB(70);FRE(0)
1070 PRINT "PROCESOS"
1075 TF$(1)="Ingreso y Modificacion de Datos"
1080 TF$(2)="Creacion de Archivo de Datos"
1085 TF$(3)="Lectura de Archivo de Datos"
1090 TF$(4)="Union de Archivos"
1095 TF$(5)="Salida de Datos"
1100 TF$(6)="Seleccion de Datos"
1105 TF$(7)="Transformacion de Datos"
1110 TF$(8)="Cambio de Parametros"
1115 KL=8 : GOSUB 980
1119 IF ISP=0 AND ITE>1 THEN CHAIN "ESTAD"+RIGHT$(STR$(ITE),1)
1120 IF ISP=0 AND ITE=1 THEN CHAIN "ESTAD"
1125 IF (ISP=2 OR ISP=6 OR ISP=7) AND NF=0 THEN KE=1: GOSUB 900 : GOTO 1060
1130 ON ISP GOSUB 1145,2000,2500,3470,4005,4300,4475,7500
1135 WEND
1140 '
1145 ' EST11 - Ingreso de Datos
1150 ' ------------------------
1155 WHILE KW=0
1160 TSP$="Ingreso de Datos"
1165 GOSUB 555
1167 PRINT "PROCESOS"
1170 TF$(1)="Ingreso por Observacion"
1175 TF$(2)="Ingreso por Variable"
1180 TF$(3)="Insercion de Observaciones"
1185 TF$(4)="Eliminacion de Observaciones"
1190 KL=4 : GOSUB 980
1195 IF ISP=0 THEN RETURN
1200 IF ISP>2 OR NC=0 THEN 1215
1205 PRINT : INPUT "Borrado de Memoria de Trabajo ? (N) = ",A$
1210 IF A$="S" OR A$="s" THEN GOSUB 1250
1215 PRINT
1220 PRINT "Descripcion actual de los Datos = ";DA$
1225 INPUT "Nueva Descripcion (Idem) = ",A$
1230 IF LEN(A$)>0 THEN DA$=A$
1235 ON ISP GOSUB 1300,1510,1625,1855
1240 WEND
1245 '
1250 DA$="" : NA$=""
1255 NC=0 : NF=0 :NX=0
1260 FOR J=1 TO NCM
1265 TC$(J)=" "
1270 FOR I=1 TO NFM
1275 A(I,J)=XVF
1280 NEXT I
1285 NEXT J
1290 RETURN
1295 '
1300 ' EST 111 - Ingreso de Datos por Observacion
1305 ' ------------------------------------------
1310 TSP$=TSP$+" - Por Observacion"
1315 GOSUB 555
1320 IF NC>0 THEN GOSUB 500
1325 PRINT : INPUT "Variable Inicial a Ingresar = ",A$
1330 IF LEN(A$)=0 THEN RETURN
1335 JI=VAL(A$)
1340 IF JI<1 OR JI>NCM THEN KE=4 : GOSUB 900 : GOTO 1325
1345 PRINT : INPUT "Variable Final a Ingresar = ",A$
1350 IF LEN(A$)=0 THEN RETURN
1355 JJ=VAL(A$)
1360 IF JJ<JI OR JJ>NCM THEN KE=5 : B$=">="+STR$(JI)+" y <="+STR$(NCM) :
GOSUB 900 : GOTO 1345
1365 IF NC=0 THEN 1380
1370 PRINT : INPUT "Actualizacion Nombres de Variables ? (N) = ",A$
1375 IF A$<>"S" AND A$<>"s" THEN 1415
1380 PRINT
1385 FOR K=JI TO JJ
1390 PRINT " Nombre de la Variable";K;TAB(29);"(";TC$(K);TAB(38);")"; : INPUT " =
1395 IF LEN(A$)=0 THEN 1405
1400 TC$(K)=LEFT$(A$,8)
1405 NEXT K
1410 IF NC<JJ THEN NC=JJ
1415 WHILE KW=0
1420 PRINT: INPUT "Observacion Inicial a Ingresar = ",A$
1425 IF LEN(A$)=0 THEN RETURN
1430 I=VAL(A$)
1435 IF I<1 OR I>NFM THEN KE=5 : B$=">=1 y <="+STR$(NFM) :
GOSUB 900 : GOTO 1420
1440 WHILE I<=NFM
1445 PRINT: PRINT "Ingreso Observacion";I
1450 FOR J=JI TO JJ
1455 PRINT " ";J;" - ";TC$(J);TAB(18); : INPUT " = ",A$
1460 IF LEN(A$)=0 THEN I=NFM+1 : J=JJ : GOTO 1470
1465 A(I,J)= VAL(A$)
1470 NEXT J
1475 IF I>NF AND I<=NFM THEN NF=I
1480 IF I=NFM THEN PRINT : INPUT "Se alcanzo el Nro. Maximo de Observaciones"
1485 I=I+1
1490 WEND
1495 NX=NF
1500 WEND
1505 '
1510 ' EST112 - Ingreso de Datos por Variable
1515 ' --------------------------------------
1520 TSP$=TSP$+" - Por Variable"
1525 GOSUB 555
1527 JZ=0
1529 IF NC=0 THEN 1535
1530 GOSUB 500
1531 PRINT : INPUT " Variable de Referencia (No) = ",A$
1532 IF LEN(A$)=0 THEN 1535
1533 JZ=VAL(A$)
1534 IF JZ<1 OR JZ>NC THEN KE=4 : GOSUB 900 : GOTO 1531
1535 WHILE KW=0
1537 KVA=1
1538 GOSUB 390
1540 IF J=0 THEN RETURN
1545 PRINT: INPUT "Observacion Inicial a Ingresar (1) = ",A$
1550 IF LEN(A$)=0 THEN I=1 : GOTO 1565
1555 I=VAL(A$)
1560 IF I<1 OR I>NFM THEN KE=5 : B$=">=1 y <="+STR$(NFM) :
GOSUB 900 : GOTO 1545
1565 PRINT
1570 WHILE I<=NFM
1575 PRINT "Observacion";I;
1577 IF JZ>0 THEN PRINT TAB(17);"/";A(I,JZ);"/";
1578 INPUT " = ",A$
1580 IF LEN(A$)=0 THEN I=NFM+1 : GOTO 1605
1585 A(I,J)= VAL(A$)
1590 IF I>NF THEN NF=I
1595 IF I=NFM THEN PRINT : INPUT "Se alcanzo el Nro. Maximo de Observaciones"
1600 I=I+1
1605 WEND
1610 NX=NF
1615 WEND
1620 '
1625 ' EST113 - Insercion de Observaciones
1630 ' -----------------------------------
1635 IF NF=0 THEN KE=1 : GOSUB 900 : RETURN
1637 TSP$=TSP$+" - Insercion de Observaciones"
1638 GOSUB 555
1640 PRINT "Numero de observaciones en Memoria" : PRINT
1645 PRINT " Existentes = ";NF
1650 PRINT " Maximas Posibles =";NFM
1652 IF NF=NFM THEN INPUT " (No hay lugar en Memoria para la Insercion", A$ : RETURN
1655 PRINT : INPUT "Observacion donde se inicia la Insercion = ",A$
1660 IF LEN(A$)=0 THEN RETURN
1665 II=VAL(A$)
1670 IF II<1 OR II>NF+1 THEN KE=5 : B$=">=1 y <="+STR$(NF+1) :
GOSUB 900 : GOTO 1655
1675 PRINT : INPUT "Numero de Observaciones a Insertar = ",A$
1680 IF LEN(A$)=0 THEN RETURN
1685 NI=VAL(A$)
1690 IF NI<1 OR NI>NFM-NF THEN KE=5 : B$=">=1 y <="+STR$(NFM-NF) :
GOSUB 900 : GOTO 1675
1695 IF II=NF+1 THEN 1750
1700 FOR I=NF TO II STEP -1
1705 FOR J=1 TO NCM
1710 A(I+NI,J)=A(I,J)
1715 NEXT J
1720 NEXT I
1725 FOR I=II TO II+NI-1
1730 FOR J=1 TO NCM
1735 A(I,J)=XVF
1740 NEXT J
1745 NEXT I
1755 IF NC>0 THEN GOSUB 500
1760 PRINT : PRINT "Variable Inicial a Ingresar (1)"; : INPUT " = ",A$
1765 IF LEN(A$)=0 THEN KI=1 : GOTO 1780
1770 KI=VAL(A$)
1775 IF KI<1 OR KI>NCM THEN KE=5 : B$=">=1 y <="+STR$(NCM) :
GOSUB 900 : GOTO 1760
1780 PRINT : PRINT "Variable Final a Ingresar (";NC;")"; : INPUT " = ",A$
1785 IF LEN(A$)=0 THEN KF=NC : GOTO 1800
1790 KF=VAL(A$)
1795 IF KF<1 OR KF>NCM THEN KE=5 : B$=">=1 y <="+STR$(NCM) :
GOSUB 900 : GOTO 1780
1800 I=II
1805 FOR I=II TO II+NI-1
1810 PRINT: PRINT "Ingreso Observacion";I
1815 FOR J=KI TO KF
1820 PRINT " ";J;" - ";TC$(J);TAB(18); : INPUT " = ",A$
1825 IF LEN(A$)=0 THEN J=KF : I=II+NI-1 : GOTO 1835
1830 A(I,J)= VAL(A$)
1835 NEXT J
1840 NEXT I
1843 NF=NF+NI : NX=NF
1844 PRINT : INPUT "Insercion Terminada - Enter ",A$
1845 RETURN
1850 '
1855 ' EST114 - Eliminacion de Observaciones
1860 ' -------------------------------------
1865 IF NF=0 THEN KE=1 : GOSUB 900 : RETURN
1867 TSP$=TSP$+" - Eliminacion de Observaciones"
1868 GOSUB 555
1870 PRINT "Numero de Observaciones en Memoria = ";NF
1885 PRINT : INPUT "Observacion Inicial a Eliminar = ",A$
1890 IF LEN(A$)=0 THEN RETURN
1895 II=VAL(A$)
1900 IF II<1 OR II>NF THEN KE=5 : B$=">=1 y <="+STR$(NF) :
GOSUB 900 : GOTO 1885
1905 PRINT : INPUT "Observacion Final a Eliminar = ",A$
1910 IF LEN(A$)=0 THEN RETURN
1915 IJ=VAL(A$)
1920 IF IJ<II OR IJ>NF THEN KE=5 : B$=">="+STR$(II)+"<="+STR$(NF) :
GOSUB 900 : GOTO 1885
1925 PRINT : PRINT "Observaciones a Eliminar ";II;"a";IJ; : INPUT "? (N) = ",A$
1930 IF A$<>"S" AND A$<>"s" THEN 1865
1935 FOR I=IJ+1 TO NF
1940 FOR J=1 TO NCM
1945 A(I-IJ+II,J)=A(I,J)
1950 A(I,J)=XVF
1955 NEXT J
1960 NEXT I
1965 NF=NF-IJ+II-1 : NX=NF
1970 PRINT : INPUT "Eliminacion Terminada - Enter ",A$
1975 RETURN
1980 '
2000 ' EST12 - Creacion de Archivo de Datos
2005 ' ------------------------------------
2010 TSP$="Creacion de Archivo de Datos"
2015 GOSUB 555
2017 PRINT "VARIABLES A GRABAR"
2020 TF$(1)="Todas las Variables"
2025 TF$(2)="Variables Seleccionadas"
2030 KL=2 : GOSUB 980
2035 IF ISP=0 THEN RETURN
2040 WHILE ISP=1
2045 FOR J=1 TO NC : VX(J)=J : NEXT J : NCK=NC
2050 ISP=0
2055 WEND
2060 WHILE ISP=2
2065 NCX=NC
2075 GOSUB 500
2080 PRINT : GOSUB 2405
2085 IF NCK=0 THEN RETURN
2090 ISP=0
2095 WEND
2100 KC=0 : IF CD$="" THEN 2120
2105 PRINT : INPUT "Se considera Condicion de Seleccion ? (N) = ",A$
2110 IF A$="S" OR A$="s" THEN KC=1
2120 NFX=NF : M=1
2125 GOSUB 2390
2155 NZ=0
2160 FOR I=IA(1) TO IB(1)
2165 IF KC=1 AND A(I,0)=1 THEN 2175
2170 NZ=NZ+1
2175 NEXT I
2180 PRINT : PRINT "TIPO DE ARCHIVO A CREAR"
2185 TF$(1)="Archivo ESTAD (.EST)"
2190 TF$(2)="Archivo LOTUS (.PRN)"
2195 TF$(3)="Archivo ASCII (.ASF)"
2200 KL=3 : GOSUB 980
2205 IF ISP=0 THEN RETURN
2210 IF ISP=1 THEN XA$=".EST"
2215 IF ISP=2 THEN XA$=".PRN"
2220 IF ISP=3 THEN XA$=".ASF"
2225 KAR=0 : PRINT : PRINT "Archivos en Disco ";DDA$
2226 PRINT : FILES DDA$+":*"+XA$
2230 IF KAR=1 THEN PRINT " No Existen" : KAR=0
2235 PRINT : INPUT "Nombre del Archivo a Crear = ",A$
2240 IF LEN(A$)=0 THEN RETURN
2245 KE=0
2250 GOSUB 950
2253 XNA$=A$
2255 IF KAR=0 THEN PRINT : INPUT "Archivo Existente - Se Reemplaza ? (N) = ",A$
2260 IF KAR=0 AND (A$<>"S" AND A$<>"s") THEN 2235
2265 IF KE=1 THEN 2235
2267 IF ISP>1 THEN 2275
2269 PRINT : PRINT "Descripcion actual de los Datos = ";DA$
2270 PRINT : INPUT "Nueva Descripcion (Idem) = ",A$
2271 IF LEN(A$)>0 THEN DAX$=A$ ELSE DAX$=DA$
2275 IF ISP=1 THEN 2290
2280 PRINT : INPUT "Nombres de Variables en Primer Registro ? (N) = ",A$
2285 KNM=0 : IF A$="S" OR A$="s" THEN KNM=1
2290 OPEN XDDA$+XNA$+EXT$ FOR OUTPUT AS #1
2295 IF ISP=1 THEN PRINT#1,DAX$ : PRINT#1,NZ,NCK
2300 K=0
2305 FOR J= 1 TO NCK
2310 IF ISP=1 THEN PRINT#1,TC$(VX(J))
2315 IF ISP=2 AND KNM=1 THEN K=K+1:PRINT#1,TAB(14*K-13);CHR$(34);TC$(VX(J));
CHR$(34);
2317 IF ISP=3 AND KNM=1 THEN PRINT#1," ";TC$(VX(J));
2320 NEXT J
2325 IF (ISP=2 OR ISP=3) AND KNM=1 THEN PRINT#1,
2330 IF NF=0 THEN 2380
2335 FOR I=IA(1) TO IB(1)
2340 IF KC=1 AND A(I,0)=1 THEN 2375
2350 FOR J=1 TO NCK
2355 IF (ISP=1 OR ISP=3) THEN PRINT#1,A(I,VX(J));
2360 IF ISP=2 THEN PRINT#1,TAB(14*J-13);A(I,VX(J));
2365 NEXT J
2370 PRINT#1,
2375 NEXT I
2380 CLOSE#1
2382 IF NA$="" THEN NA$=XNA$
2384 PRINT : INPUT "Grabacion Terminada - Enter ",A$
2386 RETURN
2389 '
2390 ' Definicion de Observaciones a Considerar
2392 PRINT : INPUT "Observacion Inicial a Considerar (Todas) = ",A$
2393 IF LEN(A$)=0 THEN IA(M)=1 :IB(M)=NFX : RETURN
2394 IA(M)=VAL(A$)
2395 IF IA(M)<1 OR IA(M)>NFX THEN KE=5 : B$=">=1 y <="+STR$(NFX) :
GOSUB 900 : GOTO 2392
2396 PRINT : PRINT "Observacion Final a Considerar (";NFX;")"; : INPUT " = ",A$
2397 IF LEN(A$)=0 THEN IB(M)=NFX : RETURN
2398 IB(M)=VAL(A$)
2399 IF IB(M)<IA(M) OR IB(M)>NFX THEN KE=5 : B$=">="+STR$(IB(M))+ " y
<="+STR$(NFX) : GOSUB 900 : GOTO 2396
2400 RETURN
2404 '
2405 ' EST121 - Definicion de Variables
2410 ' --------------------------------
2415 L=0 : NCK=0
2420 WHILE KW=0
2425 INPUT " Variable a Seleccionar = ",A$
2430 IF LEN(A$)=0 THEN RETURN
2435 K=VAL(A$) : KS=0 : IF K<0 THEN KS=1 : K=-K
2440 IF K<1 OR K>NCX THEN KE=5 : B$=">=1 y <="+STR$(NCX) :
GOSUB 900 : GOTO 2425
2445 IF KS=1 AND (K<=L OR L=0) THEN KE=5 : B$=">0": GOSUB 900: GOTO 2425
2450 IF KS=0 THEN NCK=NCK+1 : VX(NCK)=K : GOTO 2470
2455 FOR N=L+1 TO K
2460 NCK=NCK+1 : VX(NCK)=N
2465 NEXT N
2470 L=K
2475 WEND
2480 '
2500 ' EST13 - Lectura de Archivo de datos
2505 ' -----------------------------------
2510 TSP$="Lectura de Archivo de Datos
2515 GOSUB 555
2516 IF NC=0 THEN 2519
2517 PRINT : INPUT "Borrado de Memoria de Trabajo ? (N) = ",A$
2518 IF A$="S" OR A$="s" THEN GOSUB 1250
2519 PRINT
2520 PRINT "TIPO DE ARCHIVO A LEER"
2525 TF$(1)="Archivo ESTAD (.EST)"
2530 TF$(2)="Archivo LOTUS (.PRN)"
2535 TF$(3)="Archivo ASCII (.ASF)"
2540 KL=3 : GOSUB 980
2545 IF ISP=0 THEN RETURN
2547 IKP=ISP
2550 IF IKP=1 THEN XA$=".EST"
2555 IF IKP=2 THEN XA$=".PRN"
2560 IF IKP=3 THEN XA$=".ASF"
2565 KAR=0 : PRINT : PRINT "Archivos en Disco ";DDA$
2570 PRINT : FILES DDA$+":*"+XA$
2575 IF KAR=1 THEN PRINT " No Existen" : KAR=0
2580 PRINT: INPUT "Nombre del Archivo a Leer = ",A$
2585 IF LEN(A$)=0 THEN RETURN
2590 KE=0
2595 GOSUB 950
2600 IF KAR=1 THEN PRINT : PRINT CHR$(7) : INPUT "** ARCHIVO NO EXISTENTE",A$ : KAR=0 :
GOTO 2580
2605 IF KE=1 THEN 2580
2610 NA$=A$ : NCK=0
2615 WHILE IKP=1
2617 ARC$(1)=NA$
2620 PRINT : PRINT "ARCHIVO A LEER"
2625 M=1 : GOSUB 3240
2627 IF ISP=0 OR NCK=0 THEN CLOSE#1 : RETURN
2775 IF IB(1)-IA(1)>NFM THEN KE=6 : GOSUB 900 : CLOSE#1 : GOTO 2625
2780 WHILE ISP=1
2795 NC=NCX
2800 FOR J=1 TO NC : TC$(J)=TCX$(J) : NEXT J
2803 IX=0
2805 FOR I=1 TO NFX
2807 KX=0
2810 FOR J=1 TO NC
2815 INPUT#1,X
2816 IF I<IA(1) OR I>IB(1) THEN 2820
2817 IF KX=0 THEN IX=IX+1 : KX=1
2818 A(IX,J)=X
2820 NEXT J
2825 NEXT I
2830 ISP=0
2835 WEND
2840 WHILE ISP=2
2850 FOR J=1 TO NCM : VY(J)=0 : NEXT J
2870 PRINT : PRINT "POSICIONES DE MEMORIA A INGRESAR VARIABLES"
2875 IF NC>0 THEN GOSUB 500
2880 PRINT
2883 KX=0
2885 FOR K=1 TO NCK
2890 J=VX(K)
2895 PRINT " Posicion a ubicar Variable";J;" - ";TCX$(J);TAB(45);
2900 INPUT " = ",A$
2905 IF LEN(A$)=0 THEN 2950
2910 L=VAL(A$)
2915 IF L<1 OR L>NCM THEN KE=5 : B$=">=1 Y <="+STR$(NCM) :
GOSUB 900 : GOTO 2895
2920 IF LEN(TC$(L))=0 OR LEFT$(TC$(L),2)=" " THEN 2940
2925 PRINT : PRINT "Variable";L;" actual = ",TC$(L)
2930 INPUT " Se utiliza ? (N) = ",A$
2935 IF A$<>"S" AND A$<>"s" THEN 2895
2940 TC$(L)=TCX$(J)
2945 VY(J)=L : KX=1
2950 NEXT K
2955 IF KX=0 THEN RETURN
2957 IX=0
2960 FOR I=1 TO NFX
2963 KX=0
2965 FOR J=1 TO NCX
2970 INPUT#1,X
2975 IF I<IA(1) OR I>IB(1) THEN 2995
2980 K=VY(J)
2983 IF KX=0 THEN IX=IX+1 : KX=1
2985 IF K>0 THEN A(IX,K)=X
2990 IF K>NC THEN NC=K
2995 NEXT J
3000 NEXT I
3015 ISP=0
3020 WEND
3022 DA$=DAX$
3023 NF=IB(1)-IA(1)+1 : NX=NF
3025 IKP=0
3030 WEND
3035 WHILE IKP>=2
3040 PRINT : INPUT "Nombre de Variables en Primer Registro ? (N) = ",A$
3045 KNM=0 : NFX=0 : IF A$="S" OR A$="s" THEN KNM=1 : NFX=1
3050 OPEN XDDA$+NA$+EXT$ FOR INPUT AS #1
3055 NCX=0 : KM=0 : C$=""
3060 LINE INPUT#1,A$
3065 IL=LEN(A$) : KX=0
3070 FOR I=1 TO IL
3075 B$=MID$(A$,I,1)
3077 IF B$="," THEN B$=" "
3080 IF KNM=1 AND B$=" " AND KM=1 THEN KM=0: TC$(NCX)=LEFT$(C$,8) :
C$="" : GOTO 3105
3085 IF KNM=0 AND B$=" " AND KM=1 THEN KM=0: A(NFX,NCX)=VAL(C$) :
C$="" : GOTO 3105
3090 IF B$=" " OR B$=CHR$(34) THEN 3105
3095 IF KM=0 THEN KM=1 : IF NCX<NCM THEN NCX=NCX+1 ELSE KX=1
3100 C$=C$+B$
3105 NEXT I
3107 IF KX=1 THEN KE=6 : GOSUB 900 : RETURN
3110 IF C$>"" AND KNM=1 THEN TC$(NCX)=LEFT$(C$,8)
3115 IF C$>"" AND KNM=0 THEN A(NFX,NCX)=VAL(C$)
3120 NC=NCX : N=0
3125 WHILE NOT EOF(1)
3130 INPUT#1,X
3135 IF N<NCX THEN N=N+1 : GOTO 3145
3140 IF N=NCX THEN N=1 : NFX=NFX+1 : IF NFX>NFM THEN KE=6 : GOSUB 900 :
RETURN
3145 A(NFX,N)=X
3185 WEND
3190 NF=NFX : NX=NF
3195 IKP=0
3200 WEND
3205 CLOSE#1
3210 JF=0 : CD$="" : NV=0 : NVC(1)=0 : NVC(2)=0
3215 FOR I=1 TO NF : A(I,0)=0 : NEXT I
3220 FOR I=NC+1 TO NCM : TC$(I)=" " : NEXT I
3225 PRINT : INPUT "Lectura Terminada - Enter ",A$
3230 RETURN
3235 '
3240 ' EST131 - Definicion Datos Archivo a Leer
3245 ' ----------------------------------------
3250 OPEN XDDA$+ARC$(M)+EXT$ FOR INPUT AS #M
3255 LINE INPUT#M,DAX$
3260 INPUT#M,NFX,NCX
3270 FOR J=1 TO NCX
3275 INPUT#M,TCX$(J)
3280 NEXT J
3285 PRINT : PRINT
3287 PRINT "CARACTERISTICAS DEL ARCHIVO" : PRINT
3290 PRINT " NOMBRE = ";ARC$(M);" - ";DAX$ : PRINT
3295 PRINT " Numero de Variables = ";NCX
3300 PRINT " Numero de Observaciones = ";NFX
3305 PRINT
3310 I=1
3315 FOR L=1 TO NCX
3320 IF LEFT$(TCX$(L),2)=" " THEN 3335
3325 PRINT TAB(15*I-11);L;"-";TCX$(L);
3330 I=I+1 : IF I>5 THEN I=1 : PRINT
3335 NEXT L
3339 PRINT : PRINT
3340 PRINT : PRINT "VARIABLES A CONSIDERAR"
3345 TF$(1)="Todas las Variables"
3350 TF$(2)="Variables Seleccionadas"
3355 KL=2 : GOSUB 980
3359 IF ISP=0 THEN CLOSE#M : RETURN
3360 IPC=ISP
3361 WHILE IPC=1
3362 IF NCX>NCM THEN KE=6 : GOSUB 900 : GOTO 3340
3365 NCK=NCX
3369 FOR K=1 TO NCK : VX(K)=K : NEXT K
3370 IF M=1 THEN FOR K=1 TO NCK : VY(K)=VX(K) : NEXT K
3371 IPC=0
3372 WEND
3375 WHILE IPC=2
3385 PRINT : GOSUB 2405
3390 IF NCK=0 THEN RETURN
3395 IF M=1 THEN FOR K=1 TO NCK : VY(K)=VX(K) : NEXT K
3400 IPC=0
3405 WEND
3420 GOSUB 2390
3460 RETURN
3465 '
3470 ' EST14 - Union de Archivos
3475 ' -------------------------
3485 TSP$="Union de Archivos"
3490 GOSUB 555
3493 PRINT " (Solo con Archivos tipo ESTAD)" : PRINT
3495 PRINT "PROCESOS"
3500 TF$(1)="Union por Variables"
3505 TF$(2)="Union por Observaciones"
3510 TF$(3)="Creacion de Subarchivo"
3515 KL=3 : GOSUB 980
3520 IF ISP=0 THEN RETURN
3525 IKP=ISP
3550 PRINT : PRINT "Archivos en Disco ";DDA$
3555 PRINT : FILES DDA$+":*.EST"
3560 IF KAR=1 THEN PRINT " No Existen" : KAR=0
3565 FOR M=1 TO 3
3570 IF M=2 AND IKP=3 THEN ARC$(2)="" : GOTO 3625
3575 IF M<3 THEN PRINT "Nombre del Archivo Fuente Nro.";M;TAB(37);
ELSE PRINT : PRINT "Nombre del Archivo Destino";TAB(37);
3580 INPUT "(.EST) = ",A$
3585 IF LEN(A$)=0 THEN RETURN
3590 KE=0 : XA$=".EST"
3595 GOSUB 950
3597 C$=A$
3600 IF M<3 AND KAR=1 THEN PRINT : PRINT CHR$(7) : INPUT
"** ARCHIVO NO EXISTENTE",A$ : KAR=0 : GOTO 3575
3605 IF M=3 AND KAR=0 THEN PRINT : INPUT
"Archivo Existente - Se Reemplaza ? (N) = ",A$
3610 IF M=3 AND KAR=0 AND (A$<>"S" AND A$<>"s") THEN 3575
3615 IF KE=1 THEN 3575
3620 ARC$(M)=C$
3625 NEXT M
3630 FOR M=1 TO 2
3635 IF ARC$(M)="" THEN 3650
3640 PRINT : PRINT "ARCHIVO FUENTE NRO.";M : PRINT
3645 GOSUB 3240 : CLOSE #M
3647 NIJ(M)=IB(M)-IA(M)+1
3648 NVS(M)=NCK : NFT(M)=NFX : NCT(M)=NCX
3650 NEXT M
3655 IF IKP=1 AND (NVS(1)<>NVS(2)) THEN PRINT CHR$(7) : PRINT : INPUT "**
CANTIDAD DE VARIABLES DIFERENTE EN LOS DOS ARCHIVOS",A$ : GOTO 3550
3660 IF IKP=2 AND (NIJ(1)<>NIJ(2)) THEN PRINT CHR$(7) : PRINT : INPUT "**
CANTIDAD DE OBSERVACIONES DIFERENTE EN LOS DOS ARCHIVOS",A$ : GOTO 3550
3665 CLOSE
3670 PRINT : INPUT "Descripcion de Archivo Destino = ",DAX$
3675 FOR M=1 TO 2
3680 IF IKP=3 AND M=2 THEN 3695
3685 OPEN XDDA$+ARC$(M)+EXT$ FOR INPUT AS #M
3690 INPUT#M,A$,X,Y
3695 NEXT M
3700 NFX=NFT(1) : IF NFX<NFT(2) THEN NFX=NFT(2)
3715 OPEN XDDA$+ARC$(3)+EXT$ FOR OUTPUT AS #3
3720 PRINT#3,DAX$
3725 WHILE IKP=1 OR IKP=3
3730 PRINT#3,NIJ(1)+NIJ(2),NVS(1)
3733 FOR K=1 TO NCT(1) : INPUT#1,TCX$(K) : NEXT K
3734 FOR K=1 TO NCT(2) : INPUT#2,A$ : NEXT K
3735 FOR K=1 TO NVS(1)
3745 PRINT#3,TCX$(VY(K))
3750 NEXT K
3755 FOR I=1 TO NFT(1)
3760 FOR K=1 TO NCT(1)
3765 INPUT#1,V(K)
3767 NEXT K
3770 IF I<IA(1) OR I>IB(1) THEN 3790
3775 FOR K=1 TO NVS(1)
3780 PRINT#3,V(VY(K));
3783 NEXT K
3785 PRINT#3,
3790 NEXT I
3795 IF IKP=3 THEN 3840
3800 FOR I=1 TO NFT(2)
3805 FOR K=1 TO NCT(2)
3810 INPUT#2,V(K)
3812 NEXT K
3815 IF I<IA(2) OR I>IB(2) THEN 3835
3820 FOR K=1 TO NVS(2)
3823 PRINT#3,V(VX(K));
3825 NEXT K
3830 PRINT#3,
3835 NEXT I
3840 IKP=0
3845 WEND
3850 WHILE IKP=2
3855 PRINT#3,NIJ(1),NVS(1)+NVS(2)
3857 FOR K=1 TO NCT(1) : INPUT#1,TCX$(K) : NEXT K
3860 FOR K=1 TO NVS(1)
3870 PRINT#3,TCX$(VY(K))
3875 NEXT K
3877 FOR K=1 TO NCT(2) : INPUT#2,TCX$(K) : NEXT K
3880 FOR K=1 TO NVS(2)
3890 PRINT#3,TCX$(VX(K))
3895 NEXT K
3900 FOR I=1 TO NFX
3905 IF I>NFT(1) THEN 3935
3910 FOR K=1 TO NCT(1)
3915 INPUT#1,V(K)
3917 NEXT K
3920 IF I<IA(1) OR I>IB(1) THEN 3935
3925 FOR K=1 TO NVS(1)
3927 PRINT#3,V(VY(K));
3930 NEXT K
3935 IF I>NFT(2) THEN 3965
3940 FOR K=1 TO NCT(2)
3945 INPUT#2,V(K)
3947 NEXT K
3950 IF I<IA(2) OR I>IB(2) THEN 3970
3953 FOR K=1 TO NVS(2)
3955 PRINT#3,V(VX(K));
3960 NEXT K
3965 PRINT#3,
3970 NEXT I
3975 IKP=0
3980 WEND
3985 CLOSE : DS$="SCRN:" : OPEN DS$ FOR OUTPUT AS#3
3990 PRINT : INPUT "Union terminada - Enter ",A$
3995 RETURN
4000 '
4005 ' EST15 - Salida de Datos
4010 ' -----------------------
4015 TSP$="Salida de Datos"
4017 GOSUB 555
4018 XA$=".EST"
4019 PRINT "DATOS EN"
4020 TF$(1)="Memoria de Trabajo"
4021 TF$(2)="Archivo de Datos (.EST)"
4022 KL=2 : GOSUB 980
4023 IF ISP=0 THEN RETURN
4024 IF ISP=1 AND NF=0 THEN KE=1 : GOSUB 900 : RETURN
4025 LA=ISP : XX=LA
4026 WHILE LA=1
4030 NCX=NC : NFX=NF
4035 FOR K=1 TO NC : TCX$(K)=TC$(K) : NEXT K
4040 GOSUB 500 : PRINT : GOSUB 2405
4045 IF NCK=0 THEN RETURN
4050 KC=0 : IF CD$="" THEN 4070
4055 PRINT : INPUT "Se considera Condicion de Seleccion ? (N) = ",A$
4060 IF A$="S" OR A$="s" THEN KC=1
4070 NFX=NF : M=1
4080 GOSUB 2390
4102 LA=0
4103 WEND
4105 WHILE LA=2
4106 KAR=0 : PRINT : PRINT "Archivos en Disco ";DDA$
4107 PRINT : FILES DDA$+":*"+XA$
4108 IF KAR=1 THEN PRINT " No Existen" : KAR=0
4109 PRINT: INPUT "Nombre del Archivo = ",A$
4110 IF LEN(A$)=0 THEN RETURN
4111 KE=0
4112 GOSUB 950
4113 IF KAR=1 THEN PRINT : PRINT CHR$(7) : INPUT "** ARCHIVO NO EXISTENTE" ,A$
- KAR=0 : GOTO 4109
4114 IF KE=1 THEN 4109
4115 M=1 : ARC$(1)=A$
4116 GOSUB 3240 : CLOSE#1
4117 IF ISP=0 OR NCK=0 THEN RETURN
4118 KC=0 : LA=0
4119 WEND
4120 LA=XX
4122 PRINT : PRINT "Salida actual por Pantalla"
4123 GOSUB 650
4125 KS=1
4126 WHILE KS=1
4127 GOSUB 555
4128 KX=0 : KN=0
4129 IF LA=2 THEN PRINT#3,"Archivo de Datos = ";ARC$(1) : PRINT#3,
4130 FOR M=1 TO NCK STEP 6
4132 IF LA=1 THEN 4140
4133 OPEN XDDA$+ARC$(1)+EXT$ FOR INPUT AS #1
4134 LINE INPUT#1,A$ : INPUT#1,X,Y
4135 FOR K=1 TO NCX : INPUT#1,A$ : NEXT K
4140 KM=KN+1 : KN=KM+5
4145 IF KN>NCK THEN KN=NCK
4150 FOR I=1 TO NFX
4152 IF LA=2 THEN FOR K=1 TO NCX : INPUT#1,VY(K) : NEXT K
4153 IF I<IA(1) OR I>IB(1) THEN 4267
4155 WHILE KX=0
4157 N=0
4158 PRINT#3,
4160 FOR K=KM TO KN
4165 J=VX(K) : N=N+1
4170 PRINT#3,TAB(12*N-4);J;
4175 NEXT K
4180 PRINT#3, : PRINT#3,"Obs.";
4183 N=0
4185 FOR K=KM TO KN
4190 J=VX(K) : N=N+1
4195 PRINT#3,TAB(12*N-4);TCX$(J);
4200 NEXT K
4205 PRINT#3,
4210 KA=1 : KB=12*N+7 : GOSUB 695
4215 IL=8 : KX=1
4220 WEND
4225 IF NFX=0 THEN RETURN
4230 IF KC=1 AND A(I,0)=1 THEN 4270
4235 PRINT#3,I;
4237 N=0
4240 FOR K=KM TO KN
4245 J=VX(K) : N=N+1
4247 IF LA=1 THEN X=A(I,J)
4248 IF LA=2 THEN X=VY(J)
4250 PRINT#3,TAB(12*N-4);X;
4255 NEXT K
4260 PRINT#3,
4265 IL=IL+1
4267 IF (IL=22 OR I=NFX) AND DS$="SCRN:" THEN PRINT : INPUT
"Enter (F: fin) ",A$ : KX=0 : IF A$="F" OR A$="f" THEN I=NFX : M=NCK
4270 NEXT I
4273 KX=0
4274 CLOSE#1
4275 NEXT M
4280 GOSUB 650
4285 WEND
4290 RETURN
4295 '
4300 ' EST16 - Seleccion de Datos para procesos
4305 ' ----------------------------------------
4310 TSP$="Seleccion de Datos"
4315 GOSUB 555
4317 PRINT : PRINT "DEFINICION DE CONDICION DE SELECCION" : PRINT
4320 GOSUB 500
4325 IF LEN(CD$)=0 THEN 4360
4327 FOR I=1 TO NFM : A(I,0)=0 : NEXT I
4330 PRINT : PRINT "Condicion de Seleccion existente = ";CD$
4335 PRINT : INPUT " Se Elimina ? (N) = ",A$
4340 IF A$="S" OR A$="s" THEN CD$="" : RETURN
4345 INPUT " Se Modifica ? (N) = ",A$
4350 IF A$<>"S" AND A$<>"s" THEN 4412
4360 'PRINT : PRINT "Condicion a Ingresar = ",CD$
4365 'LOCATE CSRLIN-1,1
4370 PRINT : INPUT "Condicion a Ingresar = ",A$
4375 IF LEN(A$)=0 THEN CD$="" : RETURN
4380 CD$=A$
4385 OPEN DDA$+":xyz.bas" FOR OUTPUT AS #1
4390 PRINT#1,"4460 if not("+CD$+") THEN a(i,0)=1"
4395 CLOSE#1
4400 CHAIN MERGE DDA$+":xyz",4405,ALL
4405 KILL DDA$+":xyz.bas"
4410 ON ERROR GOTO 936
4412 FOR J=1 TO NC : V(J)=A(1,J) : NEXT J : I=1
4413 GOSUB 4460
4414 A(1,0)=0 : KMM=0
4415 L=LEN(CD$)
4416 FOR M=1 TO L-1
4417 A$=MID$(CD$,M,2)
4418 WHILE A$="V(" OR A$="v("
4419 M=M+1 : B$=""
4420 M=M+1
4421 C$=MID$(CD$,M,1)
4422 IF C$<>")" THEN B$=B$+C$ : GOTO 4420
4423 K=VAL(B$) : KMM=0
4424 IF K<1 OR K>NC OR TC$(K)=" " THEN KE=4 :
GOSUB 900 : KMM=1
4426 A$=""
4427 WEND
4428 NEXT M
4429 IF KE=1 OR KMM=1 THEN KE=0 : GOTO 4370
4430 FOR I=1 TO NF
4435 FOR J=1 TO NC : V(J)=A(I,J) : NEXT J
4440 GOSUB 4460
4445 NEXT I
4450 PRINT : INPUT "Seleccion Terminada - Enter ",A$ : GOSUB 1035
4455 ' Funcion de Seleccion
4460 IF NOT(V(5)>=35 AND V(5)<40) THEN A(I,0)=1
4465 RETURN
4470 '
4475 ' EST17 - Transformacion de Datos
4480 ' -------------------------------
4485 WHILE KW=0
4490 TSP$="Transformacion de Datos"
4493 NXX=0
4495 GOSUB 555
4500 PRINT "TRANSFORMACIONES"
4505 TF$(1)="Mediante una Funcion"
4510 TF$(2)="Normalizacion"
4515 TF$(3)="Recodificacion"
4520 TF$(4)="Corrimiento/Diferencias"
4525 TF$(5)="Calculo de Rangos"
4530 TF$(6)="Calculo de Variables Indicatrices"
4535 TF$(7)="Ordenamiento"
4540 KL=7 : GOSUB 980
4545 IF ISP=0 THEN RETURN
4550 TSP$=TSP$+" - "+TF$(ISP)
4555 GOSUB 555
4560 GOSUB 500
4565 IF ISP=1 THEN 4590
4570 PRINT : INPUT "VARIABLE A TRANSFORMAR = ",A$
4575 IF LEN(A$)=0 THEN RETURN
4580 JZ=VAL(A$)
4585 IF JZ<1 OR JZ>NC OR TC$(JZ)=" " THEN KE=4 :
GOSUB 900 : GOTO 4570
4590 IF ISP=6 THEN 4630
4595 PRINT : PRINT "VARIABLE CON VALORES TRANSFORMADOS"
4600 KVA=1 : GOSUB 390
4605 IF J=0 THEN RETURN
4615 KC=0 : IF CD$="" THEN 4630
4620 PRINT : INPUT "Se considera Condicion de Seleccion ? (N) = ",A$
4625 IF A$="S" OR A$="s" THEN KC=1
4630 ON ISP GOSUB 4650,4810,4880,5010,5046,5082,5142
4635 PRINT : INPUT "Transformacion Terminada - Enter ",A$
4640 WEND
4645 '
4650 ' EST171 - Transformacion mediante una Funcion
4655 ' --------------------------------------------
4660 PRINT : PRINT "DEFINICION DE FUNCION DE TRANSFORMACION" : PRINT
4665 GOSUB 500
4670 IF LEN(FU$)=0 THEN 4700
4675 PRINT "Funcion de Transformacion existente = ",FU$
4680 INPUT "Se Modifica ? (N) = ",A$
4685 IF A$<>"S" AND A$<>"s" THEN 4742
4690 'PRINT : PRINT "Funcion a Ingresar = ";FU$
4695 'LOCATE CSRLIN-1,1
4700 PRINT : INPUT "Funcion a Ingresar = ",A$
4705 IF LEN(A$)=0 THEN FU$="" : RETURN
4710 FU$=A$
4715 OPEN DDA$+":xyz.bas" FOR OUTPUT AS #1
4720 PRINT#1,"4795 A(i,j)="+FU$
4725 CLOSE#1
4730 CHAIN MERGE DDA$+":xyz",4735,ALL
4735 KILL DDA$+":xyz.bas"
4740 ON ERROR GOTO 936
4742 FOR K=1 TO NC : V(K)=A(1,K) : VX(K)=0 : NEXT K
4743 XX=A(1,J)
4744 GOSUB 4795
4746 A(1,J)=XX
4748 L=LEN(FU$)
4749 FOR M=1 TO L-1
4750 A$=MID$(FU$,M,2)
4751 WHILE A$="V(" OR A$="v("
4752 M=M+1 : B$=""
4753 M=M+1
4754 C$=MID$(FU$,M,1)
4755 IF C$<>")" THEN B$=B$+C$ : GOTO 4753
4756 K=VAL(B$) : KMM=0
4757 IF K<1 OR K>NC OR TC$(K)=" " THEN KE=4 :
GOSUB 900 : KMM=1
4758 VX(K)=1
4759 A$=""
4760 WEND
4761 NEXT M
4762 IF KE=1 OR KMM=1 THEN KE=0 : GOTO 4700
4763 FOR I=1 TO NF
4764 KMM=0
4765 IF KC=1 AND A(I,0)=1 THEN 4780
4770 FOR K=1 TO NC
4771 V(K)=A(I,K)
4772 IF VX(K)=1 AND V(K)=XVF THEN KMM=1
4773 NEXT K
4775 IF KMM=0 THEN GOSUB 4795 ELSE A(I,J)=XVF
4780 NEXT I
4785 PRINT : INPUT "Transformacion Terminada - Enter ",A$ : GOSUB 1035
4790 ' Funcion de Transformacion
4795 A(I,J)=V(2)+V(3)
4800 RETURN
4805 '
4810 ' EST172 - Normalizacion
4815 ' ----------------------
4820 XX=J : J=JZ
4825 GOSUB 5480
4830 J=XX
4835 IF NXX<2 THEN KE=3 : GOSUB 900 : RETURN
4840 FOR I=1 TO NF
4845 X=A(I,JZ)
4850 IF (KC=1 AND A(I,0)=1) THEN 4865
4855 IF X=XVF THEN A(I,J)=XVF : GOTO 4865
4860 A(I,J)=(X-PX)/DEX
4865 NEXT I
4870 RETURN
4875 '
4880 ' EST173 - Recodificacion de Datos
4885 ' --------------------------------
4890 XX=J : J=JZ
4895 PRINT : PRINT "Ingreso de Intervalos Valores Actuales" : PRINT
4900 K=1 : GOSUB 6010
4905 IF NVC(1)=0 THEN RETURN
4910 J=XX
4915 PRINT
4920 FOR M=0 TO NVC(1)
4925 PRINT "Nuevo valor para x ";
4930 IF M=0 THEN PRINT "< ";VC(M+1,1); : GOTO 4940
4935 IF M=NVC(1) THEN PRINT ">= ";VC(M,1); : GOTO 4940
4937 PRINT ">= ";VC(M,1);" y < ";VC(M+1,1);
4940 INPUT " = ",A$
4945 VC(M,2)=VAL(A$)
4950 NEXT M
4955 FOR I=1 TO NF
4960 X=A(I,JZ)
4965 IF (KC=1 AND A(I,0)=1) THEN 4995
4970 IF X=XVF THEN A(I,J)=XVF : GOTO 4995
4975 A(I,J)=VC(NVC(1),2)
4980 FOR M=1 TO NVC(1)
4985 IF X<VC(M,1) THEN A(I,J)=VC(M-1,2) : M=NVC(1)
4990 NEXT M
4995 NEXT I
5000 RETURN
5005 '
5010 ' EST174 - Corrimiento/Diferencias
5012 ' --------------------------------
5014 PRINT : PRINT "PROCESO"
5015 TF$(1)="Corrimiento"
5016 TF$(2)="Diferencia"
5017 KL=2 : GOSUB 980
5018 IF ISP=0 THEN RETURN
5020 PRINT : INPUT " Numero de Observaciones para Corrim/Difer. = ",A$
5022 IF LEN(A$)=0 THEN RETURN
5024 K=VAL(A$)
5026 IF K<1 OR K>NF-1 THEN KE=5 : B$=">=1 y <="+STR$(NF-1) :
GOSUB 900 : GOTO 5020
5028 FOR I=1 TO NF
5030 IF I<=K THEN A(I,J)=XVF : GOTO 5040
5031 X=A(I-K,JZ)
5032 IF (KC=1 AND A(I-K,0)=1) THEN 5040
5033 IF X=XVF THEN A(I,J)=XVF : GOTO 5040
5034 IF ISP=1 THEN A(I,J)=X
5035 IF ISP=2 THEN Y=A(I,JZ) : IF (KC=1 AND A(I,0)=1) THEN 5040
5036 IF ISP=2 THEN IF Y=XVF THEN A(I,J)=XVF : GOTO 5040
5038 IF ISP=2 THEN A(I,J)=Y-X
5040 NEXT I
5042 RETURN
5044 '
5046 ' EST175 - Calculo de Rangos
5048 ' --------------------------
5050 N=0
5052 FOR I=1 TO NF
5053 X=A(I,JZ)
5054 IF (KC=1 AND A(I,0)=1) THEN 5060
5055 IF X=XVF THEN A(I,J)=XVF : GOTO 5060
5056 N=N+1
5058 VX(N)=X : VY(N)=I
5060 NEXT I
5062 IF N<2 THEN KE=3 : GOSUB 900 : RETURN
5064 XX=J
5066 GOSUB 5188
5068 J=XX
5070 FOR I=1 TO N
5072 IK=VY(I)
5074 A(IK,J)=VX(I+N)
5076 NEXT I
5078 RETURN
5080 '
5082 ' EST176 - Calculo de Variables Indicatrices
5084 ' ------------------------------------------
5086 PRINT : PRINT "Ingreso de Intervalos Valores Actuales" : PRINT
5088 J=JZ
5090 K=1 : GOSUB 6010
5092 IF NVC(1)=0 THEN RETURN
5094 PRINT
5096 NVI=NVC(1)-1
5097 PRINT : PRINT "ALMACENAM. DE VARIABLES INDICAT. EN MEMORIA DE TRABAJO"
5098 FOR K=1 TO NVI
5100 PRINT : PRINT "Variable Indicatriz Nro.";K
5102 IF K>1 THEN KVA=1
5104 GOSUB 390
5108 VX(K)=J
5110 NEXT K
5112 FOR I=1 TO NF
5114 X=A(I,JZ)
5116 KMM=0 : IF (KC=1 AND A(I,0)=1) OR X=XVF THEN KMM=1
5120 KX=0
5122 FOR K=1 TO NVI
5124 J=VX(K)
5126 IF J=0 THEN KX=1 : GOTO 5132
5128 IF KMM=1 THEN A(I,J)=XVF : KX=1 : GOTO 5132
5130 IF X>=VC(K,1) AND X<VC(K+1,1) THEN A(I,J)=1 : KX=1 ELSE A(I,J)=0
5132 NEXT K
5134 IF KX=0 THEN PRINT: PRINT "Observacion Nro.";I;" no se encontro valor"
5136 NEXT I
5138 RETURN
5140 '
5142 ' EST177 - Ordenamiento
5144 ' ---------------------
5146 PRINT : PRINT "TIPO DE ORDENAMIENTO"
5148 TF$(1)="De Menor a Mayor"
5150 TF$(2)="De Mayor a Menor"
5152 KL=2 : GOSUB 980
5154 IF ISP=0 THEN RETURN
5156 N=0
5158 FOR I=1 TO NF
5160 X=A(I,JZ)
5162 IF (KC=1 AND A(I,0)=1) OR X=XVF THEN 5170
5166 IF ISP=2 THEN X=-X
5168 N=N+1 : VX(N)=X : VY(N)=I
5170 NEXT I
5171 IF N<2 THEN KE=3 : GOSUB 900 : RETURN
5172 GOSUB 5226
5174 FOR I=1 TO N
5176 X=VX(I)
5178 IF ISP=2 THEN X=-X
5180 A(I,J)=X
5182 NEXT I
5183 IF N<NF THEN FOR I=N+1 TO NF : A(I,J)=XVF : NEXT I
5184 RETURN
5186 '
5188 ' EST178 - Determinacion de Rangos de un vector de valores
5190 ' --------------------------------------------------------
5192 FOR I=1 TO N : VX(I+N)=0 : NEXT I
5194 FOR I=1 TO N
5196 IF VX(I+N)>0 THEN 5220
5198 NM=0 : NI=0
5200 X=VX(I)
5202 FOR J=1 TO N
5204 IF VX(J)<X THEN NM=NM+1
5206 IF VX(J)=X THEN NI=NI+1 : VX(J+N)=-1
5208 NEXT J
5210 IF NI<=1 THEN VX(I+N)=NM+1 : GOTO 5220
5212 P=NM+(NI+1)*.5
5214 FOR J=1 TO N
5216 IF VX(J+N)=-1 THEN VX(J+N)=P
5218 NEXT J
5220 NEXT I
5222 RETURN
5224 '
5226 ' EST179 - Ordenamiento de un vector de valores
5228 ' ---------------------------------------------
5230 LOG2=INT(LOG(N)*(1!/.69314728#)+.00001)
5232 MM=N
5234 FOR NN=1 TO LOG2
5236 MM=INT(MM/2)
5238 K=N-MM
5240 FOR JJ=1 TO K
5242 I=JJ
5244 L=I+MM
5246 IF VX(L)>=VX(I) THEN 5256
5248 X=VX(I) : VX(I)=VX(L) : VX(L)=X
5250 X=VY(I) : VY(I)=VY(L) : VY(L)=X
5252 I=I-MM
5254 IF I>=1 THEN 5244
5256 NEXT JJ
5258 NEXT NN
5260 RETURN
5262 '
5264 '
5480 ' EST211 - Calculo de Valor medio, Desv.Std.,Max.,Min.
5485 ' ----------------------------------------------------
5490 SX=0 : SCX=0 : NXX=0
5495 XMI=1E+10 : XMA=-1E+10
5500 FOR I=1 TO NF
5505 IF A(I,0)=1 THEN 5550
5510 X= A(I,J)
5515 IF X=XVF THEN 5550
5520 IF X<XMI THEN XMI=X
5525 IF X>XMA THEN XMA=X
5530 ND=1 : IF JF>0 THEN ND=A(I,JF)
5535 IF ND=XVF THEN 5550
5540 SX=SX+ND*X : SCX=SCX+ND*X^2
5545 NXX=NXX+ND
5550 NEXT I
5555 IF NXX<2 THEN RETURN
5560 PX=SX/NXX
5565 DEM=SQR((SCX-NXX*PX^2)/NXX)
5570 DEX=SQR((SCX-NXX*PX^2)/(NXX-1))
5575 RETURN
5580 '
6010 ' EST221 - Ingreso de Valores de Clasificacion
6015 ' --------------------------------------------
6020 IF NVC(K)=0 THEN 6050
6025 PRINT : PRINT "Valores Actuales de Clasificacion" : PRINT
6030 FOR M=1 TO NVC(K) : PRINT VC(M,K);" - "; : NEXT M : PRINT
6035 PRINT : INPUT "Ingreso de Nuevos Valores de Clasificacion (S/N) = ";A$
6040 IF A$<>"S" AND A$<>"s" THEN VC(0,K)=VC(1,K) : RETURN
6045 NVC(K)=0
6050 GOSUB 5480
6055 PRINT "(Valores Maximo y Minimo de los Datos = ";XMI;"-";XMA;")"
6060 PRINT
6065 INPUT " Valor de la Variable = ",A$
6070 IF LEN(A$)=0 THEN RETURN
6075 XB=VAL(A$)
6080 IF NVC(K)>0 AND XB<=X THEN GOSUB 900 : GOTO 6065
6085 IF NVC(K)=0 THEN 6125
6090 INPUT " Incremento para obtener Valores intermedios = ",A$
6095 DI=VAL(A$)
6100 IF DI<0 OR DI>XB-X THEN GOSUB 900 : GOTO 6090
6105 WHILE DI>0 AND X+DI<XB
6110 X=X+DI
6115 NVC(K)=NVC(K)+1 : VC(NVC(K),K)=X
6120 WEND
6125 NVC(K)=NVC(K)+1 : VC(NVC(K),K)=XB : X=XB : GOTO 6065
7500 ' EST9 - Cambio de Parametros
7505 ' ---------------------------
7510 TSP$="Cambio de Parametros"
7515 WHILE KW=0
7520 KMM=0
7525 GOSUB 555
7530 PRINT : PRINT "VALORES ACTUALES DE PARAMETROS" : PRINT
7535 TF$(1)=" 1 - Disposit. Archivo de datos (A,B o C) = " :PRINT TF$(1);DDA$
7540 TF$(2)=" 2 - Numero de Variables (1 a 100) =" : PRINT TF$(2);NCM
7545 TF$(3)=" 3 - Numero de Observaciones (10 a 1000) =" : PRINT TF$(3);NFM
7550 TF$(4)=" 4 - Parametro Proceso 1 (5 a 100) =" :PRINT TF$(4);PAR1
7555 TF$(5)=" 5 - Parametro Proceso 2 (2 a 50) =" :PRINT TF$(5);PAR2
7560 TF$(6)=" 6 - Valor faltante =" : PRINT TF$(6);XVF
7565 TF$(7)=" 7 - Numero de decimales (mayor que 0) =" : PRINT TF$(7);NDE
7570 PRINT : INPUT "Numero de Parametro a modificar = ",A$
7575 IF LEN(A$)=0 AND KME=1 THEN 7650
7580 IF LEN(A$)=0 THEN RETURN
7585 ISP=VAL(A$)
7590 IF ISP<1 OR ISP>7 THEN GOSUB 900 : GOTO 7525
7595 IF KMM=1 OR NC=0 OR (ISP<>2 AND ISP<>3) THEN 7615
7600 PRINT : PRINT "Un cambio en este parametro implica el borrado"
7605 INPUT "de la memoria de trabajo - Se continua ? (N) = ",A$
7610 IF A$<>"S" AND A$<>"s" THEN 7675
7615 PRINT
7620 PRINT TAB(3);TF$(ISP); : INPUT " ",A$
7625 IF LEN(A$)=0 THEN 7675
7630 X=VAL(A$)
7635 ON ISP GOSUB 7685,7710,7730,7750,7770,7790,7805
7640 KME=0
7645 XMEM=4*(NFM*NCM+(PAR1+1)*(PAR2+1))
7650 IF XMEM>40000! THEN PRINT : PRINT "Los valores de los parametros" : PRINT
"exceden la memoria disponible" : INPUT "",A$ : KME=1 : GOTO 7675
7655 IF KMM=0 THEN 7675
7660 ERASE A,TC$,JX
7665 DIM A(NFM,NCM),TC$(NCM),JX(NCM)
7670 DA$="" : NA$="" : NC=0 : NF=0 : NV=0 : NX=0
7675 WEND
7680 '
7685 IF LEN(A$)>1 THEN GOSUB 900 : RETURN
7690 IF INSTR("ABCabc",A$)=0 THEN GOSUB 900 : RETURN
7695 DDA$=A$
7700 RETURN
7705 '
7710 IF X<1 OR X>100 THEN GOSUB 900 : RETURN
7715 NCM=X : KMM=1
7720 RETURN
7725 '
7730 IF X<10 OR X>1000 THEN GOSUB 900 : RETURN
7735 NFM=X : KMM=1
7740 RETURN
7745 '
7750 IF X<5 OR X>100 THEN GOSUB 900 : RETURN
7755 PAR1=INT(X)
7760 RETURN
7765 '
7770 IF X<2 OR X>PAR1 OR X>50 THEN GOSUB 900 : RETURN
7775 PAR2=INT(X)
7780 RETURN
7785 '
7790 XVF=X
7795 RETURN
7800 '
7805 IF X<1 OR X>6 THEN GOSUB 900 : RETURN
7810 NDE=X
7815 RETURN