Cálculo del número de columna condicionalFor each ID group in the data table, I like to calculate:
-
The count of Part Number where RANK_DESC = 1
-
The count of Part Number where RANK_ASC = 1 </CODE></STRONG></P>
<SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="ReliabilityWolf_0-1745749897393.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/75219iB37346FFBB9C212B/ReliabilityWolf_0-1745749897393.png" role="button" title="ReliabilityWolf_0-1745749897393.png" alt="ReliabilityWolf_0-1745749897393.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN>
<P>Me gustaría agregar <SPAN>dos nuevas columnas PN Count de RANK_DEC = 1, PN Count de RANK_ASC = 1. ¿Hay alguna fórmula para aplicarlas?</SPAN></P>
<SPAN>¿Algún otro método mejor para abordarlo? ¡Muchas gracias de antemano!</SPAN></LI>
</OL></LINGO-BODY><LINGO-LABS id="lingo-labs-870410" slang="en-US" mode="CREATE"><LINGO-LABEL>Análisis y modelado de datos básicos</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-870421" slang="en-US" mode="UPDATE">Re: Cálculo del número de columna condicional</LINGO-SUB><LINGO-BODY id="lingo-body-870421" slang="en-US" mode="UPDATE"><P>Para el cálculo condicional, JMP proporciona las funciones de agregación <FONT face="courier new,courier">Columna XYZ()</FONT> .<BR /> Para realizar el recuento, puede utilizar <FONT face="courier new,courier">Col Number().</FONT> Cuenta cualquier entrada que no falte.<FONT face="courier new,courier"><BR /></FONT> Para convertir filas no coincidentes en "faltantes", necesita algo como <FONT face="courier new,courier">Col suma (si (Rank_ASC==1,1,.),:Part_Number).<BR /></FONT> Si Rank es 1, la expresión <FONT face="courier new,courier">si</FONT> devuelve 1, para las otras filas, devolverá "." (faltante) y JMP no cuenta la fila.<BR /><BR /> Después de un primer argumento para la entrada numérica, puede especificar columnas (y expresiones) adicionales para especificar byGroups.<BR /> Con <FONT face="courier new,courier">:Número de pieza</FONT> como segundo argumento, JMP creará recuentos separados para cada :Part_Number.<BR /><BR /> Prefiero <FONT face="courier new,courier">Columna Suma().<BR /></FONT> Para contar filas específicas, puede utilizar una comparación como <FONT face="courier new,courier">Suma de columnas (Rank_ASC==1 , :Número_de_pieza).<BR /></FONT> La idea detrás de la expresión:<BR /> Para las filas con <FONT face="courier new,courier">rango 1,</FONT> el resultado de la comparación <FONT face="courier new,courier">Rank_ASC==1</FONT> es 1, para las demás filas el resultado es 0.<BR /> Entonces, <FONT face="courier new,courier">suma de columnas</FONT> contará todas las filas con rango=1.<BR /> Aquí, volvemos a usar <FONT face="courier new,courier">:Número de pieza</FONT> como segundo argumento. Por lo tanto, los recuentos serán independientes para los diferentes Part_Numbers.<BR /><BR /></P>
<PRE><CODE class=" language-jsl">New Table( "parts",
Add Rows( 7 ),
New Column( "ID",
Character,
Set Values( {"U30372", "W30569", "W30569", "Q40040", "P40051", "P40051", "P40051"} )
),
New Column( "Part_Number",
Character,
Set Values( {"T772", "T772", "T772", "T772", "T770", "T772", "T770"} )
),
New Column( "Rank_ASC", Formula( Col Rank( :Part_Number, :ID ) ) ),
New Column( "PN_Count_Rank_ASC",
Formula( Col Sum( :Rank_ASC == 1, :Part_Number ) ),
Set Display Width( 156 )
),
New Column( "RANK_DESC",
Formula( (Col Number( :Part_Number, :ID ) - Col Rank( :Part_Number, :ID )) + 1 )
),
New Column( "PN_Count_Rank_DESC", Formula( Col Sum( :RANK_DESC == 1, :Part_Number ) ) )
)
Re: Cálculo del número de columna condicionalPerdón por mi declaración poco clara.
Aquí está mi expectativa: por ejemplo, en el grupo "P40051", Part_number de Rank_ASC_1 == "T770", el recuento de "T770" en este grupo es 2, algo similar, Part_number de Rank_DESC_1 == "T772", el recuento de "T772" en este grupo es 1. en el grupo "Q40040", Part_number de Rank_ASC_1 y Part_number de Rank_DESC_1 == "T770", el recuento de Part_number de Rank_DESC_1 o el recuento de "T770" en este grupo es 1. Aquí está mi resultado esperado en las 2 columnas de la derecha.

Adjunto el archivo de datos para su comprobación.
Re: Cálculo del número de columna condicionalAh, right, I mixed up the
For each ID group
with
Para cada unoPart_Numbergrupo
Re: Cálculo del número de columna condicionalEste código debería funcionar:
New Table( "parts",
Add Rows( 7 ),
New Column( "ID",
Character,
Set Values( {"U30372", "W30569", "W30569", "Q40040", "P40051", "P40051", "P40051"} )
),
New Column( "Part_Number",
Character,
Set Values( {"T772", "T772", "T772", "T772", "T770", "T772", "T770"} )
),
New Column( "Rank_ASC", Formula( Col Rank( :Part_Number, :ID ) ) ),
New Column( "PN_Count_Rank_ASC=1",
Formula( Col Sum( Col Rank(:Part_Number, :ID,<< tie(minimum)) ==1, :ID ) ),
),
Con la opción << tie(minimum) , cada fila con el número de pieza de rango 1 obtendrá un rango igual a 1, de modo que se contabilizarán todas esas filas. En este caso, podemos omitir el paso intermedio de calcular el rango.
Re: Cálculo del número de columna condicionalSin el < < ont> opción, las filas adicionales con el mismo ID/Número de pieza obtendrán rangos incrementales.
Aquí puede utilizar un Col min() para replicar la información de Rank=1 en todas las filas del mismo ID/Número de pieza:
get the minimum rank of the combination :Part_Number / :ID :
Col Minimum( :RANK_ASC,:Part_Number, :ID)
if this min rank is 1, mark the row:
Col Minimum( ... ) == 1
for these rows, the result is 1, all the other rows get 0
for every ID, count the 1s:
Col sum( ... , :ID )</CODE></LI>
</UL>
<P><SPAN>Con este enfoque, <FONT face="courier new,courier">conteo_Rango_ASC</FONT> y <FONT face="courier new,courier">conteo_Rango_DESC</FONT> se pueden construir con un código similar:</SPAN></P>
<PRE><CODE class=" language-jsl">New Table( "parts",
Add Rows( 7 ),
New Column( "ID",
Character,
Set Values( {"U30372", "W30569", "W30569", "Q40040", "P40051", "P40051", "P40051"} )
),
New Column( "Part_Number",
Character,
Set Values( {"T772", "T772", "T772", "T772", "T770", "T772", "T770"} )
),
New Column( "Rank_ASC", Formula( Col Rank( :Part_Number, :ID ) ) ),
New Column( "PN_Count_Rank_ASC=1",
Formula( Col sum(Col Minimum( :RANK_ASC,:Part_Number, :ID) ==1, :ID ))
),
New Column( "RANK_DESC",
Formula( (Col Number( :Part_Number, :ID ) - Col Rank( :Part_Number, :ID )) + 1 )
),
New Column( "PN_Count_Rank_DESC=1",
Formula( Col sum(Col Minimum( :RANK_DESC,:Part_Number, :ID) ==1, :ID ))
)
)
Re: Cálculo del número de columna condicionalEn mi tabla, la columna "RANK_ASC" estaba allí, no estoy seguro si está definida por la columna Rank(:Part_Number, :ID). Pero me gusta basarme en el valor de RANK_ASC (RANK_ASC==1) para encontrar el Part_Number específico, luego esperar que la fórmula apropiada calcule el recuento de Part_number en este grupo. En su fórmula, no tengo idea de cómo correlacionar << tie(minimum) con RANK_ASC (RAN_ASC==1). Por cierto, ¿cuál es la fórmula para RANK_DESC==1?
Re: Cálculo del número de columna condicionalAquí hay una opción (hay muchas otras opciones también)
Col Sum(:Part_Number == :Part_Number[Col Min(If(:RANK_ASC == 1, Row(), .), :ID)], :ID) //change :RANK_ASC to RANK_DESC for other formula

Este tipo de fórmula que utiliza Col Min/Max, If() y Row() puede ser bastante útil.
Tenga en cuenta que podría fallar en futuras versiones de JMP, ya que estas funciones no están diseñadas para usarse de esta manera. Para evitar que JMP cometa un error grave, he creado este elemento de la lista de deseos : "Comportamiento compatible con el uso de expresiones de fórmula en Establecer cada valor y el uso de expresiones como primer argumento en las fórmulas estadísticas de Col".
Re: Cálculo del número de columna condicionalPara RANK_DESC=1, estoy seguro de que se puede configurar una fórmula complicada con << empate.
Mucho más fácil: utilice el segundo enfoque:
https://community.jmp.com/t5/Discussions/Conditional-Column-number-calculation/mp/870429/highlight/true#M103370
Si no le gusta/no confía en la opción << tie() , utilice el segundo enfoque.
Si Rank_ASC y RANK_DESC ya están en la tabla, es un buen argumento para usar el segundo enfoque. No es necesario calcular las columnas por cuenta propia.
Re: Cálculo del número de columna condicionalGracias por tu apoyo, funciona.Re: Cálculo del número de columna condicionalbienvenido.