macro= var: actK minK maxK gVal a b Nval maxIts ; if (ntax<0) quote NO HAY DATOS!; proc/; end set gVal 1; /* busca el valor de g */ loop 0 nchar if (!isinfo[#1]) continue; end if (!isact[#1]) continue; end set a=maxsteps[#1]; set b=minsteps[#1]; if (('a'-'b')>'gVal') set gVal 'a'-'b'; end stop quote valor de g = 'gVal'; set actK 10; set minK 0; set maxK 500; /* Asume 500 como el maximo posible valor de K */ set maxIts 0; /* busca el mejor valor de K */ loop 0 1 quote actual valor de k = 'actK'; set a 1-('actK'/('actK'+1)); quote 'a'; set b ('actK'/('actK'+'gVal'-1))-('actK'/('actK'+'gVal')); quote 'b'; set Nval 'a'/'b'; quote valor de N = 'Nval'; if (('Nval'>14.8)&&('Nval'<15.2)) endloop; end /* N esta en el rango */ if ('Nval'>15.2) set minK 'actK'; else set maxK 'actK'; end set a ('maxK'-'minK')/2; set actK 'minK' + 'a'; set maxIts ++; if ('maxIts'==100) endloop; end /* salida de emergencia */ setloop 0; stop /* Si salio de emergencia */ if ('maxIts'==100) quote NO SE TERMINARON LAS ITERACIONES; quote mejor K encontrado: 'actK'; proc /; end quote Valor de K: 'actK' (N='Nval'); piwe='actK';