Problema en el script JMP para el bucleHola, tengo dos preguntas:
Ques1 -
Tengo un dato simple (adjunto) y un script que funciona bien, pero siempre que quiera convertirlo en un bucle for. No conseguir lo correcto.
OBJETIVO: quiero el valor de resistencia superior al 10% para cada corriente. Mis datos no son simétricos, lo que significa que el número de puntos de datos para cada corriente es diferente.
En los mismos datos hay solo 7 valores actuales y en datos reales, puede tomar cientos de valores.
Enfoque: estoy generando una tabla de cuantiles y luego comparo mi valor de resistencia por un valor de cuantiles del 90% y agrego una columna adicional 'Top10%'. Todo funciona bien para datos de muestra con 7 valores actuales, pero necesito un bucle para ello. ¿Pueden los superusuarios señalarme cuál es el error que estoy cometiendo en mi bucle for? Esto ayudará a aprender cómo implementar bucles for.
Alguna ayuda ?
Pregunta 2: ¿Cuál es la mejor manera de obtener los mejores datos del 95%?
¿Alguna ayuda aquí?
ScriptingRe: problema en el script JMP para loopCreo que el siguiente script es una metodología más simple para obtener los resultados que desea.

Names Default To Here( 1 );
dtF2 = Data Table( "Final_Data" );
dtSum = dtF2 << Summary(
invisible,
Group( :Current ),
Quantiles( 90, :Res ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "stat" ),
link to original data table( 0 )
);
dtSum << delete columns( N Rows );
dtF2 << Update(
With( dtSum ),
Match Columns( :Current = :Current )
);
Close( dtSum, nosave );
dtF2 << New Column( "Top10%",
character,
formula( If( :Res >= :Quantiles90, "Top10" ) )
);
Re: problema en el script JMP para loopSí, perfectamente bien. Manera mucho mejor y más sencilla de hacerlo. No sabía que también podemos obtener cuantiles de la tabla de resumen. Lo estoy implementando de la manera que describiste.
Aparte del cuantil y los datos del 10% superior, ¿algún comentario sobre qué estaba mal en mi "bucle for"?
Gracias por la ayuda.
Re: problema en el script JMP para loopAcerca de la lógica del bucle For ()
- Una columna solo puede tener 1 fórmula. Tener la definición de fórmula dentro del ciclo For () especificaría una fórmula diferente para cada ciclo. No sé exactamente qué haría JMP, en el mejor de los casos, reemplazaría cada fórmula cuando se creara una nueva, terminando solo con la última creada.
- Al establecer el valor de "Fallo" dentro de cada Si, la única vez que su lógica sería precisa es si el Último Nivel es el nivel de la fila actual. De lo contrario, digamos, el Nivel 3 es el nivel actual para la fila dada. JMP establecería el valor en la instrucción If para el nivel 1 en Fail, Level 2, Fail, Level 3 en Top10%, pero el bucle For () continúa, por lo que la prueba del nivel 4 resultará en Fail .... ..... y el resto de niveles.
- Con una fórmula para una columna que tiene valores de variable definidos fuera de la fórmula (es decir, dtF2, dtQ y las referencias a las columnas en la tabla de datos dtQ), esos valores y la tabla de datos deberán estar presentes siempre que la tabla de datos con el se abre la fórmula. Entonces, lo que debe hacer, al usar tales fórmulas, es eliminar la fórmula, una vez que la tabla de datos ha ejecutado la fórmula.
dtF2:Name("Top10%") << delete formula;
Aquí hay una versión de la fórmula que creo que funcionaría ... No la he probado, pero creo que verá el enfoque.
dtF2 << New Column( "Top10%",
character,
FORMULA(
For( i = 1, N Rows( dtQ ), i++,
x = "";
If( dtF2:Current == dtQ:Level[i] & dtF2:Name( "Res" ) >= dtQ:Name( "90%" )[i],
x = "Top10"
);
);
If( x == "", x = "Fail" );
x;
)
);