Problema de cicloTengo este problema de ciclo recurrente detectado que no puedo resolver y espero que alguien pueda ayudarme.
Vea el script de ejemplo adjunto. Genera una tabla. La idea aquí es que quiero etiquetar cada ejecución continua de 1 en la Columna 1 como un Evento con un número secuencial.
La fórmula funciona. Pero cuando hago modificaciones en la tabla o vuelvo a ejecutar fórmulas, obtengo errores detectados de uno, dos o, a veces, tres ciclos. Esta es sólo una tabla de ejemplo. En mi tabla de datos real, a veces he tenido que presionar Ignorar todos los ciclos hasta una docena de veces si cambio la fórmula de una columna o realizo otras ediciones en la tabla.
¿Alguien sabe qué está causando esto?
Gracias
New Table( "Cycle Problem",
Add Rows( 21 ),
New Table Variable( "P1", 3 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0]
)
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If(
Row() == 1, :P1 = 0,
:Column 1 == 1 & :Column 1[Row() - 1] == 0, :P1 = :P1 + 1,
:Column 1 == 1, :P1
)
),
Set Selected
)
)
Automatización y secuencias de comandosRe: Problema de cicloNo estoy seguro de lo que significa la advertencia de ciclo. Me parece una falsa alarma. Pero mientras tanto, supongo que el resultado de seguir el script es lo que intentas lograr y no tiene el problema del ciclo.
New Table( "Cycle Problem",
Add Rows( 21 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0]
)
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If(
Row() == 1, 0,
:Column 1 == 1 & :Column 1[Row() - 1] == 0, :Column 2[Row() - 1] + 1,
:Column 2[Row() - 1]
)
),
Set Selected
)
)
Re: Problema de cicloLo más probable es que los problemas del ciclo se deban a que usted configura el valor de la variable de la tabla P1 y los compara en la misma fórmula.
If(Row() == 1,
:P1 = 0
, :Column 1 == 1 & :Column 1[Row() - 1] == 0,
:P1 = :P1 + 1
, :Column 1 == 1,
:P1
)
Puedes usar fórmulas como
If(Row() == 1,
retval = 0
, :Column 1 == 1 & Lag(:Column 1) == 0,
retval = retval + 1
);
retval;

Lag() te da acceso a valores anteriores en una columna
Re: Problema de cicloHola,
También está bien retrasar la columna de fórmula. Es decir, podrías utilizar esta fórmula en la columna C2 para los valores que tienes en C1:
If( Row() == 1,
0,
Lag( :C2 ) + (Lag( :C1 ) == 0 & :C1 == 1)
)
Re: Problema de ciclo@peng_liu , @jthi y @brady_brady ...
Gracias por su ayuda en esto. Sin embargo, los scripts que me proporcionó no hicieron lo que necesitaba y cuando intenté modificarlos no funcionaron. Específicamente, la numeración en la Columna 2 solo debe aparecer cuando hay un 1 en la Columna 1. Si hay un 0 en la Columna 1, entonces la Columna 2 está en blanco. Como esto...

Cuando intento agregar la declaración IF adicional para lograr esto, los scripts fallan.
Por ejemplo, esto es lo que hice con el script @peng_liu .
New Table( "Cycle Problem",
Add Rows( 21 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0]
)
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If(
Row() == 1, 0,
:Column 1 == 1 & :Column 1[Row() - 1] == 0,
:Column 2[Row() - 1] + 1,
:Column 1 == 1, :Column 2[Row() - 1]
)
),
Set Selected
)
)
También noté otro problema que puede estar relacionado. Cuando ejecuto el script original que proporcioné, la columna 2 está en blanco. Sin embargo, si agrego una Columna 3 con cualquier tipo de fórmula aleatoria, de repente los valores aparecen en la Columna 2. Esto también sucede en algunas de mis otras tablas.
@brady_brady Todavía estoy trabajando en tu solución para ver si puedo hacer que funcione.
Mientras tanto, ¿hay alguna orientación adicional que pueda brindarme para ayudarme?
Muchas gracias por toda tu ayuda.
Re: Problema de cicloPor ejemplo, puede agregar una declaración If al final
Names Default To Here(1);
dt = New Table("Cycle Problem",
Add Rows(21),
New Column("Column 1",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0])
)
);
dt << new column("C", Numeric, Ordinal, Formula(
If(Row() == 1,
retval = 0;
, :Column 1 == 1 & Lag(:Column 1) == 0,
retval = retval + 1
);
If(:Column 1 == 1,
retval;
,
.
);
));

Re: Problema de cicloEsto parece funcionar pero es engorroso.
If( Row() == 1,
0,
If( :C1 == 1,
If( Lag( :C1 ) == 0,
Max( :C2[Index( 1, Row() - 1 )] ) + 1,
Lag( :C2 )
),
.
)
)
Otra opción, una fórmula para la columna "C3":
If(
Row() == 1,
c = 0;
c;
,
:C1 == 0,
.
,
Lag( :C1 ) == 1,
Lag( :c3 )
,
c++;
c;
)
Re: Problema de ciclo@jthi ! Eso parece funcionar. Aunque no estoy seguro de entender por qué funciona con una declaración IF separada y no funciona con una declaración IF combinada como en mi modificación @peng_liu .
Pero lo que es más importante, ¿por qué la creación de la variable de tabla causa un problema mientras que la creación de una variable dentro del script no lo causa?
Re: Problema de cicloTambién se puede utilizar Col Cumulative Sum() para esto
Names Default To Here(1);
dt = New Table("Cycle Problem",
Add Rows(21),
New Column("Column 1",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0])
)
);
dt << new column("C", Numeric, Ordinal, Formula(
If(:Column 1,
Col Cumulative Sum(Dif(:Column 1) == 1)
,
.
);
));Re: Problema de cicloEsa es genial.
Re: Problema de ciclo@peng_liu , @jthi y @brady_brady Gracias a todos por sus soluciones. Me gusta especialmente la solución de @jthi . Nunca supe que Col Cumulative Sum podría usarse de esa manera. Muy simple, eficiente y elegante.
Todavía estoy tratando de entender cómo funcionan las variables en JMP. No estoy muy seguro de tener la imagen completa todavía, pero estoy trabajando en ello.
Re: Problema de cicloPuede, pero no estoy 100% seguro de si debería hacerlo, aunque es una de las mejores características de JMP Formulas (el soporte de JMP me dijo que es un comportamiento no deseado). Aquí hay un elemento de la lista de deseos con la esperanza de que JMP reconozca que es un comportamiento definitivamente necesario . Realice el uso de expresiones de fórmula en Establecer cada valor y el uso de expresiones como primer argumento en el comportamiento admitido de fórmulas estadísticas de Col.
Para conocer el problema del ciclo y su explicación, puede comunicarse con el soporte de JMP. Solo puedo dar conjeturas (que pueden ser correctas o totalmente incorrectas) ya que no soy un desarrollador de JMP, pero puedo entenderlo, ya que intenta tener múltiples valores al mismo tiempo. Esta también podría ser una buena lectura . Estoy confundido acerca de las variables.