Remplissez les cellules vides en fonction de l'évaluation de la valeur de différentes colonnes dans les lignes ci-dessusSalut
J'ai le problème suivant :
Je souhaite remplir les cellules via une formule ou un script dans la colonne "Liste parent" en fonction de la valeur n-1 suivante dans la colonne Niveau :
Remplissez la cellule vide (colonne « Liste des parents », ligne 10) :
• Dans la ligne avec une cellule vide, accédez à la colonne Niveau contenant la valeur « 4 »
•Calculer n-1 (« 3 »)
• Recherchez la ligne suivante ci-dessus qui contient la valeur n-1 (3), qui est la ligne n° 9. Copiez le caractère (7P61G05) de la colonne Matériau dans la cellule vide (Liste des pièces, ligne 10) :

Remplissez toutes les cellules vides en conséquence.
De plus, le cas particulier suivant peut se produire :
La numérotation diminue : sélectionnez toujours la ligne avec la valeur n-1 dans la cellule

j'espère que n'importe qui pourra résoudre ça ! Merci d'avance,
Mathias
Modélisation statistique avancéeAutomatisation et scriptsMélange et nettoyage des donnéesRe : Remplissez les cellules vides en fonction de l'évaluation de la valeur d'une autre colonne dans les lignes ci-dessusVous trouverez ci-dessous une autre idée car elle utilise une méthode un peu différente de celle de Jed.
Names Default To Here(1);
// format data
dt = Open("$DOWNLOADS\Fill empty cells V2.jmp");
Column(dt, "Desired Column")[10::N Rows(dt)] = ""; // set empty values
Column(dt, "Desired Column") << Set Name("Parent List");
//Column(dt, "Parent List") << Set Each Value( I would suggest creation of new column
dt << New Column("ParentListFixed", Character, Nominal, << Set Each Value(
As Constant(
m_levels = :Level << get values;
m_materials = :Material << get values;
);
If(Is Missing(:"Parent List"n) & !Is Missing(:Level),
level_to_search = :Level - 1;
If(level_to_search > 0,
row_of_interest = Max(Loc(m_levels[1::Row()], level_to_search));
m_materials[row_of_interest];
,
"";
);
,
:"Parent List"n
);
));Re : Remplissez les cellules vides en fonction de l'évaluation de la valeur d'une autre colonne dans les lignes ci-dessusCher Jed
Génial, le script fonctionne parfaitement, comme prévu ! Merci beaucoup pour ton soutien. Cela fera partie intégrante d'un script qui fournira les données SAP sous une forme rendant les données accessibles pour le suivi des matériaux, ce qui est pénible dans SAP. Mon script précédent a déjà rendu JMP très populaire au sein de l'entreprise car il est largement utilisé. Merci également pour le cours de script. C’est certainement quelque chose que j’aimerais mieux apprendre.
Alors merci encore et meilleures salutations,
Mathias
Re : Remplissez les cellules vides en fonction de l'évaluation de la valeur d'une autre colonne dans les lignes ci-dessusAh, maintenant je comprends mieux, je pense, ce que tu cherches. Voici un script mis à jour, ainsi qu'un lien vers l'excellent cours en ligne gratuit sur JMP Scripting
/*JMP STATISTICAL DISCOVERY LLC (“JMP”) PERMITS THE USE OF THIS COMPUTER SOFTWARE CODE (“CODE”) ON AN AS-IS BASIS AND AUTHORIZES YOU TO USE THE CODE SUBJECT TO THE TERMS LISTED HEREIN. BY USING THE CODE, YOU AGREE TO THESE TERMS. YOUR USE OF THE CODE IS AT YOUR OWN RISK. JMP MAKES NO REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRIGEMENT, AND TITLE, WITH RESPECT TO THE CODE.
You may use the Code solely as part of a software product you currently have licensed from JMP, JMP’s parent company SAS Institute Inc. (“SAS”), or one of JMP’s or SAS’s subsidiaries or authorized agents (the “Software”), and not for any other purpose. The Code is designed to add functionality to the Software but has not necessarily been tested. Accordingly, JMP makes no representation or warranty that the Code will operate error-free. JMP is under no obligation to maintain, support, or continue to distribute the Code.
Neither JMP nor its licensors shall be liable to you or any third-party for any general, special, direct, indirect, consequential, incidental, or other damages whatsoever arising out of or related to your use or inability to use the Code, even if JMP has been advised of the possibility of such damages. Except as otherwise provided above, the Code is governed by the same agreement that governs the Software. If you do not have an existing agreement with JMP or SAS governing the Software, you may not use the Code.
JMP and all other JMP Statistical Discovery LLC product or service names are registered trademarks or trademarks of JMP Statistical Discovery LLC in the USA and other countries. ® indicates USA registration. Other brand and product names are registered trademarks or trademarks of their respective companies.
*/
Names Default To Here( 1 );
dt = Current Data Table();
row()=10;
For Each Row(
dt,
If( Row() > 1,
n = row(); //temporary row variable for later
look_for_n = :Level[Row()] - 1; //find Level - 1
rows_with_n = dt << get rows where( :Level == look_for_n & row() < n ); //get all rows that match
last_n = rows_with_n[N Items( rows_with_n )]; //get the last of those rows
:Desired Column = Char( :Material[last_n] ); //put into desired column
)
);
Re : Remplissez les cellules vides en fonction de l'évaluation de la valeur d'une autre colonne dans les lignes ci-dessusBonjour Jed,
C'est fantastique! Merci beaucoup pour votre grand soutien ! Il reste encore un peu d'argent, peut-être pouvez-vous résoudre ce problème aussi ?
Le script semble chercher le numéro n-1 plus bas dans la colonne Niveau alors qu'il devrait chercher le dernier n-1, dans ce cas le niveau « 3 », c'est-à-dire avant la cellule à remplir ! Il a donc pris les mauvais caractères dans les cellules des lignes 10 à 14. J'ai créé la colonne « Correct » où vous pouvez voir la bonne cellule remplie :

Le script utilise les caractères « D9844 » du prochain niveau 3 à venir au lieu de « 7P61G05 » du dernier niveau 3 avant la ligne correspondante.
J'ajouterai la table jmp.
Merci à l'avance et meilleures salutations,
Mathias
Re : Remplissez les cellules vides en fonction de l'évaluation de la valeur d'une autre colonne dans les lignes ci-dessusSi je comprends bien, ce JSL devrait faire ce que vous recherchez :
/*JMP STATISTICAL DISCOVERY LLC (“JMP”) PERMITS THE USE OF THIS COMPUTER SOFTWARE CODE (“CODE”) ON AN AS-IS BASIS AND AUTHORIZES YOU TO USE THE CODE SUBJECT TO THE TERMS LISTED HEREIN. BY USING THE CODE, YOU AGREE TO THESE TERMS. YOUR USE OF THE CODE IS AT YOUR OWN RISK. JMP MAKES NO REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRIGEMENT, AND TITLE, WITH RESPECT TO THE CODE.
You may use the Code solely as part of a software product you currently have licensed from JMP, JMP’s parent company SAS Institute Inc. (“SAS”), or one of JMP’s or SAS’s subsidiaries or authorized agents (the “Software”), and not for any other purpose. The Code is designed to add functionality to the Software but has not necessarily been tested. Accordingly, JMP makes no representation or warranty that the Code will operate error-free. JMP is under no obligation to maintain, support, or continue to distribute the Code.
Neither JMP nor its licensors shall be liable to you or any third-party for any general, special, direct, indirect, consequential, incidental, or other damages whatsoever arising out of or related to your use or inability to use the Code, even if JMP has been advised of the possibility of such damages. Except as otherwise provided above, the Code is governed by the same agreement that governs the Software. If you do not have an existing agreement with JMP or SAS governing the Software, you may not use the Code.
JMP and all other JMP Statistical Discovery LLC product or service names are registered trademarks or trademarks of JMP Statistical Discovery LLC in the USA and other countries. ® indicates USA registration. Other brand and product names are registered trademarks or trademarks of their respective companies.
*/
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row(
dt,
If( Row() > 1,
look_for_n = :Level[Row()] - 1; //find Level - 1
rows_with_n = dt << get rows where( :Level == look_for_n ); //get all rows that match
last_n = rows_with_n[N Items( rows_with_n )]; //get the last of those rows
:Desired Column = Char( :Material[last_n] ); //put into desired column
)
);
Re : Remplissez les cellules vides en fonction de l'évaluation de la valeur d'une autre colonne dans les lignes ci-dessusOui bien sûr, merci. Dans la colonne "Colonne souhaitée", j'ai copié les cellules de la colonne "Matériel" que je m'attendrais à ce que le script insère, en fonction des valeurs de la colonne "Niveau !
Re : Remplissez les cellules vides en fonction de l'évaluation de la valeur d'une autre colonne dans les lignes ci-dessusPourriez-vous fournir un tableau de données avec les données et une colonne contenant les valeurs correctes ?