Max () comportamiento - diferente de JMP 12 vs JMP 11?¿Por qué ya no funciona lo siguiente en JMP 12?
Ejemplo, tengo una columna "WW" con entradas como ("17WW01", "17WW02", "17WW03" ... "17WW05").
Y quiero encontrar la última semana laboral en la columna "WW" (carácter / nominal en ambas versiones de JMP):
current_ww = Max(Associative Array(:WW << Get As Matrix()) << Get Keys);
JMP 11.1.1 => esto funciona bien. current_ww = "17WW05"
JMP 12.2.0 => esto ya no funciona. current_ww =.
¿Porqué es eso? ¿Max () es ahora super restrictivo en JMP 12? DJ
Re: Max () comportamiento - diferente de JMP 12 vs JMP 11?Gracias por sus comentarios sobre esto. Deberíamos haber emitido una nota de compatibilidad de JSL con este cambio; parte del problema es que el cambio afectó a varias funciones numéricas. Estaremos actualizando la documentación con una futura versión.
Cabe señalar que la función nunca funcionó correctamente en cadenas. Tenga en cuenta que expandiendo el ejemplo anterior:
lst <SPAN class="token operator">=</SPAN> <SPAN class="token punctuation">{</SPAN><SPAN class="token string">"17WW01"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW02"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW03"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW04"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW05"</SPAN><SPAN class="token punctuation">}</SPAN><SPAN class="token punctuation">;</SPAN>
Show(Max<SPAN class="token punctuation">(</SPAN>lst<SPAN class="token punctuation">))</SPAN><SPAN class="token punctuation">;<BR />Show(Min(lst));</SPAN>
Las dos respuestas vuelven igual. El error en JMP 11 (y anterior) es que el resultado que estaba viendo es un efecto secundario de la evaluación de los argumentos.
Re: Max () comportamiento - diferente de JMP 12 vs JMP 11?"Esto se cambió a propósito - Max () es una función numérica, como Mean () o Std Dev ().
Para cadenas, puede utilizar Ordenar ascendente o Ordenar descendente. Por ejemplo:"
Pero eso no es lo que dice en la sugerencia de ayuda de desplazamiento de JMP12. Dice que puede hacer el máximo de cadenas también en JMP12. Así que sí, cambió, pero la documentación de JMP12 no pudo cambiar. Es por esto que a la gente no le gusta cambiar a nuevas versiones de JMP, debido a cambios ocultos como este. En mi caso, un script JSL crítico para mi empresa funcionaba muy bien en JMP11, luego migramos a JMP12 y se bloquea. DJ
Re: Max () comportamiento - diferente de JMP 12 vs JMP 11?Y, por supuesto, esto volvió a atormentarme hoy en un guión crítico. (migrando de JMP11 a JMP12). Informaré a JMP aunque probablemente no harán nada al respecto, supongo. Definitivamente un error JMP12 en mi mente, ya que la función max indica que puede encontrar el máximo de una lista de cadenas (como solía hacerlo bien en JMP11). DJ
Re: Max () comportamiento - diferente de JMP 12 vs JMP 11?Lo desarmé de una manera diferente:
lst = {"17WW01", "17WW02", "17WW03", "17WW04", "17WW05"};
Max(lst);
Esto devuelve un valor en JMP 11 pero un valor vacío en 12 o 13. Supongo que la solución sería ordenar la lista y tomar el último elemento. No estoy seguro si el cambio de comportamiento es un error o una característica.
Re: Max () comportamiento - diferente de JMP 12 vs JMP 11?Esto se cambió a propósito - Max () es una función numérica, como Mean () o Std Dev ().
Para cadenas, puede utilizar Ordenar ascendente o Ordenar descendente. Por ejemplo:
current_ww = Sort Descending(Associative Array(:WW << Get As Matrix()) << Get Keys)[1];
Re: Max () comportamiento - diferente de JMP 12 vs JMP 11?Lo desarmé para ver dónde se rompe. Creo que es un error. Aqui esta la primera parte:
aa = Associative Array( :WW << Get As Matrix );
k = aa << Get Keys;
Esta expresión evalúa a:
Associative array( 5 elements ) assigned.
{"17WW01", "17WW02", "17WW03", "17WW04", "17WW05"}
Finalmente, hice una expresión válida.
max expr = Expr( Maximum() );
For( item = 1, item <= N Items( k ), item++,
Insert Into( max expr, k[item] );
);
Show( Name Expr( max expr ) );
Obtengo este resultado:
Name Expr(max expr) = Maximum("17WW01", "17WW02", "17WW03", "17WW04", "17WW05");
Esta es una llamada válida a la función máxima. Si los argumentos múltiples aparecen así y no en una lista o matriz, entonces todos deben ser numéricos o todas las cadenas de caracteres. Claramente este ejemplo cumple con el requisito. Cuando evalúo esta expresión, sin embargo, obtengo este resultado:
need arguments to be scalars, matrices, or lists in access or evaluation of 'Maximum' , Maximum/*###*/("17WW01", "17WW02", "17WW03", "17WW04", "17WW05")
Si intento utilizar la lista de claves original:
Name Expr(max expr) = Maximum({"17WW01", "17WW02", "17WW03", "17WW04", "17WW05"});
No recibo el mensaje de error. Solo obtengo el valor faltante como informe en la publicación original.
Parece un error.
Re: Max () comportamiento - diferente de JMP 12 vs JMP 11?Aparentemente ha cambiado. Ni JMP 12 ni JMP 13 devuelven los mismos resultados que JMP 11.