Calcul du numéro de colonne conditionnelFor 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>J'aimerais ajouter <SPAN>deux nouvelles colonnes PN Count of RANK_DEC = 1, PN Count of RANK_ASC = 1. Des formules à appliquer pour elles ?</SPAN></P>
<SPAN>d'autres meilleures méthodes d'approche ? Merci beaucoup d'avance !</SPAN></LI>
</OL></LINGO-BODY><LINGO-LABS id="lingo-labs-870410" slang="en-US" mode="CREATE"><LINGO-LABEL>Analyse et modélisation des données de base</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-870421" slang="en-US" mode="UPDATE">Re : Calcul du numéro de colonne conditionnel</LINGO-SUB><LINGO-BODY id="lingo-body-870421" slang="en-US" mode="UPDATE"><P>Pour le calcul conditionnel, JMP fournit les fonctions d'agrégation <FONT face="courier new,courier">Col XYZ()</FONT> .<BR /> Pour compter, vous pouvez utiliser <FONT face="courier new,courier">Col Number().</FONT> Cette fonction compte toutes les entrées non manquantes.<FONT face="courier new,courier"><BR /></FONT> Pour convertir les lignes non correspondantes en « manquantes », vous avez besoin de quelque chose comme <FONT face="courier new,courier">Somme des colonnes (si(Rank_ASC==1 ,1,.),:Part_Number).<BR /></FONT> Si le rang est 1, l'expression <FONT face="courier new,courier">si</FONT> renvoie 1, pour les autres lignes, elle renverra "." (manquant) - et JMP ne compte pas la ligne.<BR /><BR /> Après un premier argument pour l'entrée numérique, vous pouvez spécifier des colonnes supplémentaires (et des expressions) pour spécifier byGroups.<BR /> Avec <FONT face="courier new,courier">:Numéro_de_pièce</FONT> comme deuxième argument, JMP créera des comptes séparés pour chaque :Part_Number.<BR /><BR /> Je préfère <FONT face="courier new,courier">Somme des colonnes().<BR /></FONT> Pour compter des lignes spécifiques, vous pouvez utiliser une comparaison comme <FONT face="courier new,courier">Somme des colonnes (Rank_ASC==1 , :Part_Number ).<BR /></FONT> L'idée derrière l'expression :<BR /> Pour les lignes de <FONT face="courier new,courier">rang 1,</FONT> le résultat de la comparaison <FONT face="courier new,courier">Rank_ASC==1</FONT> est 1, pour les autres lignes le résultat est 0.<BR /> Ainsi, <FONT face="courier new,courier">somme des colonnes</FONT> comptera toutes les lignes avec un rang = 1.<BR /> Ici, nous utilisons à nouveau <FONT face="courier new,courier">:Numéro_de_pièce</FONT> comme second argument. Ainsi, les comptages seront séparés pour les différents 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 : Calcul du numéro de colonne conditionneldésolé pour ma déclaration peu claire.
voici mon attente : par exemple, dans le groupe "P40051", Part_number de Rank_ASC_1 == "T770", le nombre de "T770" dans ce groupe est de 2, chose similaire, Part_number de Rank_DESC_1 == "T772", le nombre de "T772" dans ce groupe est de 1. dans le groupe "Q40040", Part_number de Rank_ASC_1 et Part_number de Rank_DESC_1 == "T770", le nombre de Part_number de Rank_DESC_1 ou le nombre de "T770" dans ce groupe est de 1. voici mon résultat attendu dans les 2 colonnes de droite.

ci-joint le fichier de données pour vérification.
Re : Calcul du numéro de colonne conditionnelAh, right, I mixed up the
For each ID group
with
Pour chaquePart_Numbergroupe
Re : Calcul du numéro de colonne conditionnelCe code devrait fonctionner :
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 ) ),
),
Avec l'option << tie(minimum) , chaque ligne dont le numéro de pièce est de rang 1 obtient le rang 1, de sorte que toutes ces lignes sont comptabilisées. Dans ce cas, nous pouvons ignorer l'étape intermédiaire de calcul du rang.
Re : Calcul du numéro de colonne conditionnelSans le < < ont> option, les lignes supplémentaires avec le même ID / Part_Number obtiendront des rangs incrémentiels.
Ici, vous pouvez utiliser un Col min( ) pour répliquer les informations Rank=1 dans toutes les lignes du même ID/Part_number :
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>Avec cette approche, <FONT face="courier new,courier">count_Rank_ASC</FONT> et <FONT face="courier new,courier">count_Rank_DESC</FONT> peuvent être construits avec un code similaire :</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 : Calcul du numéro de colonne conditionnelDans ma table, la colonne "RANK_ASC" est là, je ne sais pas si elle est définie par la colonne Rank(:Part_Number, :ID). mais j'aime me baser sur la valeur de RANK_ASC (RANK_ASC==1) pour trouver le Part_Number spécifique, puis m'attendre à ce que le formulaire approprié calcule le nombre de Part_number dans ce groupe. Dans votre formulaire, je n'ai aucune idée de comment << tie(minimum) corréler à RANK_ASC (RAN_ASC==1). Au fait, quelle est la formule pour RANK_DESC==1 ?
Re : Calcul du numéro de colonne conditionnelVoici une option (il existe également de nombreuses autres options)
Col Sum(:Part_Number == :Part_Number[Col Min(If(:RANK_ASC == 1, Row(), .), :ID)], :ID) //change :RANK_ASC to RANK_DESC for other formula

Ce type de formule qui utilise Col Min/Max, If() et Row() peut être très utile.
Veuillez noter que cela pourrait être problématique dans les futures versions de JMP, car ces fonctions ne sont pas conçues pour être utilisées de cette façon. Afin d'éviter une erreur majeure dans JMP, j'ai créé cet élément de liste de souhaits : utiliser des expressions de formule dans Définir chaque valeur et utiliser des expressions comme premier argument dans les formules statistiques Col est un comportement pris en charge.
Re : Calcul du numéro de colonne conditionnelPour RANK_DESC=1, je suis sûr que l'on peut mettre en place une formule compliquée avec << tie.
Beaucoup plus simple : utilisez la deuxième approche :
https://community.jmp.com/t5/Discussions/Conditional-Column-number-calculation/mp/870429/highlight/true#M103370
Si vous n'aimez pas/ne faites pas confiance à l'option << tie() , utilisez la deuxième approche.
Si Rank_ASC et RANK_DESC sont déjà présents dans la table, il est judicieux d'utiliser la deuxième approche. Inutile de calculer les colonnes vous-même.
Re : Calcul du numéro de colonne conditionnelMerci pour votre soutien, ça marcheRe : Calcul du numéro de colonne conditionnelaccueillir.