Comment utiliser des "instructions conditionnelles" pour sélectionner des lignes de données à exécuter ensuite, par exemple simple Col A - Col CBesoin d'aide!
Je souhaite sélectionner des lignes de données à partir de 3 ou 4 colonnes (basées sur des instructions CONDITIONNELLES, puis exécuter une formule assez simple, par exemple si les conditions sont remplies lors de la sélection des lignes correctes
Si(
:ANNEE == 2020 , :CADRER | Maïs | Soja ,
:TYPE == SI , :"Moyenne(RENDEMENT(BU/A)_OR, 13)"n - :"Moyenne(RENDEMENT(BU/A)_OR, 8)"n,
:ELSE == :EMPTY (je préfère ne pas utiliser l'instruction ELSE si c'est possible... je veux juste que les instructions conditionnelles ci-dessus soient remplies pour savoir exactement ce qui est ajouté dans la nouvelle colonne via la formule)
OU,
Si(
:ANNEE == 2020 , :CADRER | Maïs | Soja ,
:TYPE == FOLIAIRE , :"Moyenne(RENDEMENT(BU/A)_OR, 4)"n - :"Moyenne(RENDEMENT(BU/A)_OR, 1)"n,
OU,
Si(
:ANNEE == 2021 , :CADRER | Maïs | Soja ,
:TYPE == SI , :"Moyenne(RENDEMENT(BU/A)_OR, 6)"n - :"Moyenne(RENDEMENT(BU/A)_OR, 2)"n
OU,
Si(
:ANNEE == 2021 , :CADRER | Maïs | Soja ,
:TYPE == FOLIAIRE , :"Moyenne(RENDEMENT(BU/A)_OR, 3)"n - :"Moyenne(RENDEMENT(BU/A)_OR, 1)"n
)
ScriptRe : Comment utiliser des "instructions conditionnelles" pour sélectionner des lignes de données à exécuter, par exemple simple Col A - Col CJ'ai du mal à interpréter votre pseudo code.
Je suppose que vous avez une colonne numérique appelée YEAR et que vous vérifiez si elle a la valeur 2020
Avez-vous une colonne nommée :
CULTURE | Maïs | Soja
ou voulez-vous qu'une colonne nommée CROP ait une valeur de maïs ou de soja
Il semble que vous ayez une colonne nommée TYPE et que vous vérifiez si elle a la valeur "IF" ?
et si la valeur est égale à "IF", alors vous voulez trouver la différence entre une colonne nommée Mean(YIELD(BU/A)_OR, 13) et une colonne nommée Mean(YIELD(BU/A)_OR, 8)
ou voulez-vous calculer la moyenne pour la colonne YIELD
et enfin vous faites référence à une colonne nommée ELSE et déterminez si est égal à une colonne nommée EMPTY.
Je suis sûr que ce n'est pas ce que vous voulez.
Pouvez-vous fournir un exemple de ce qu'est le tableau de données, puis décrire avec des mots ce que vous voulez.
Je vous suggère également de prendre le temps de lire le Guide de script.Il est disponible dans la bibliothèque de documentation JMP, dans le menu déroulant Aide.
Re : Comment utiliser des "instructions conditionnelles" pour sélectionner des lignes de données à exécuter, par exemple simple Col A - Col CSalut Jim, merci d'avoir répondu et j'apprécie toute aide que vous pouvez offrir et désolé pour la confusion - je vais essayer de clarifier et de simplifier le type de formule que je veux.
J'ai une colonne nommée YEAR et les valeurs sont 2020 ou 2021.
J'ai une autre colonne nommée CROP et les valeurs sont maïs ou soja.
J'ai une autre colonne nommée TYPE et les valeurs sont soit Foliar ou IF (c'est-à-dire dans le sillon)
J'ai encore 10 colonnes qui représentent le rendement moyen des traitements 1 à 10 (TRT1, TRT2,......,TRT10).
Je souhaite une formule pour calculer la valeur ajoutée de chaque Traitement (différentes doses de produit) par rapport au Traitement Témoin (taux 0).Voici le kicker, les numéros de traitement (représentant les débits de dose 0, 1, 4, 8, 16, 32, 64 FL OZ/acre) différaient entre les 2 années et entre la CULTURE et le TYPE.Par exemple, le débit de dose de produit de 16 FL OZ/acre était TRT5 en 2020 pour le maïs et le soja "IF", c'est-à-dire représente les essais dans le sillon, et était TRT3 dans les essais "foliaires" de maïs et de soja en 2021.
J'ai donc 8 combinaisons possibles de ANNÉE (2) x CULTURE (2) x TYPE (2) et j'aimerais 1 formule pour remplir les valeurs de changement en bu./acre pour un débit de dose de produit donné par rapport au traitement de contrôle (taux 0)....donc par exemple, je crée une nouvelle colonne nommée "16FLOZ_AddedValue" et je veux que la formule fasse :
Si YEAR = 2020, CROP=Corn, TYPE=Foliar, la formule doit renvoyer la valeur de "TRT3" moins colonne "TRT1" ; pourtant,
Si YEAR = 2020, CROP=Corn, TYPE=IF (c'est-à-dire dans le sillon), la formule doit renvoyer la valeur de "TRT5" moins colonne "TRT1" dans la même colonne nommée "16FLOZ_AddedValue" ; pourtant,
Si YEAR = 2021, CROP=Corn, TYPE=Foliar, la formule doit renvoyer la valeur de "TRT4" moins colonne "TRT1"" dans la même colonne nommée "16FLOZ_AddedValue" ;
etc. (désolé, je ne sais pas comment enchaîner les "IF" dans 1 formule).
En ce qui concerne le commentaire ELSE, cela concerne simplement mon désir de ne pas faire en sorte que la formule fasse des étapes d'action cachées lorsque la combinaison "IF" n'est pas remplie.En d'autres termes, par exemple, si YEAR=2020, CROP=Corn, TYPE=Foliar, alors calculez uniquement TRT3-TRT1 et omettez tout autre type d'action, c'est-à-dire laissez toutes les valeurs de cellule restantes intactes ; et passez aux instructions IF combinées suivantes qui pourraient diriger la formule pour prendre TRT5-TRT1, etc.
Re : Comment utiliser des "instructions conditionnelles" pour sélectionner des lignes de données à exécuter, par exemple simple Col A - Col CUN GRAND MERCI À : Sarah Seligman, SAS Technical Support pour avoir fourni une solution à ma question.Le copier/coller de son e-mail est ci-dessous mais le formatage est perdu, j'ai donc joint son fichier de données X.jmp et un pdf de sa réponse où il pourrait être plus facile de voir le format JSL dans la formule.Encore une fois, mes remerciements à Sarah et à Jim pour avoir initialement répondu à ma question JSL.
___
Bonjour Jeff, merci pour votre patience. J'ai joint un tableau de données contenant une formule qui fait ce que je crois que vous avez décrit. Concernant la partie de votre question où vous avez demandé "Est-il possible de structurer les instructions IF d'une manière qui omet l'action ELSE?" La réponse simple à cette question est oui - vous laissez simplement la partie "Else" de l'instruction conditionnelle IF vide. Ainsi, avec une instruction IF, cela ressemblerait à ceci dans l'éditeur de formules : dans JSL, c'est-à-dire : If(:YEAR == "2020" & :CROP == "Corn" & :TYPE == "Foliar", :TRT 03 - :TRT 01 ) Avec deux instructions IF, cela ressemblerait à ceci : En JSL, c'est-à-dire : If( :YEAR == "2020" & :CROP == "Corn" & :TYPE == "Foliar ", :TRT 03 - :TRT 01, :YEAR == "2020" & :CROP == "Maïs" & :TYPE == "IF", :TRT 05 - :TRT 01 ) Si vous utilisez plutôt l'éditeur de formule que JSL, vous pouvez insérer une nouvelle condition IF en cliquant sur l'icône caret. Dans la capture d'écran ci-dessous, j'ai cliqué trois fois dessus pour ajouter trois autres champs d'expression If. Revenons à l'objectif que vous avez décrit : je crée une nouvelle colonne nommée "16FLOZ_AddedValue" et je souhaite que la formule fasse : Si YEAR = 2020, CROP=Corn, TYPE=Foliar, la formule doit renvoyer la valeur de "TRT3" moins la colonne " TRT1" ; cependant, si YEAR = 2020, CROP=Corn, TYPE=IF (c'est-à-dire dans le sillon), la formule doit renvoyer la valeur de "TRT5" moins la colonne "TRT1" dans la même colonne nommée "16FLOZ_AddedValue" ; cependant, si YEAR = 2021, CROP=Corn, TYPE=Foliar, la formule doit renvoyer la valeur de "TRT4" moins la colonne "TRT1"" dans la même colonne nommée "16FLOZ_AddedValue" ; Voici la formule pour la nouvelle colonne 16FLOZ_AddedValue basée sur cela la description. Dans le tableau de données joint, vous pouvez cliquer sur l'icône bleue plus à côté du nom de la colonne dans le panneau des colonnes pour le voir dans l'éditeur de formule. En JSL, cette formule s'écrit : If( :YEAR == "2020" & :CROP == "Corn" & :TYPE == "Foliar", :TRT 03 - :TRT 01, :YEAR == "2020" & :CROP == "Maïs" & :TYPE == "IF", :TRT 05 - :TRT 01, :YEAR == "2021" & :CROP == "Maïs" & :TYPE == "Foliaire", : TRT 04 - :TRT 01 ) Vous avez également déclaré : En ce qui concerne les instructions ELSE, mon désir que la formule ne fasse aucune sorte d'étapes d'action cachées lorsque la combinaison "SI" n'est pas remplie. En d'autres termes, par exemple, si YEAR=2020, CROP=Corn, TYPE=Foliar, alors calculez uniquement TRT3-TRT1 et omettez tout autre type d'action, c'est-à-dire laissez toutes les valeurs de cellule restantes intactes ; et passez à la prochaine combinaison d'instructions IF qui pourrait diriger la formule pour prendre TRT5-TRT1, etc. Est-il possible de structurer les instructions IF d'une manière qui omet l'action ELSE ? La formule que j'ai créée définit la valeur appropriée lorsque les critères sont remplis pour la première condition IF, puis elle passe à la condition IF suivante, et ainsi de suite. Vous n'avez pas à spécifier de condition/valeur ELSE. J'espère que cette information vous a aidé. S'il vous plaît laissez-moi savoir si vous avez des questions supplémentaires. Cordialement, Sarah Seligman Assistance technique JMP Partager. Interroger. Apprendre. Relier. - community.jmp.com Je serai heureux de continuer à travailler avec vous si vous avez des questions complémentaires à ce sujet ; répondez simplement à cet e-mail dans les 5 jours ouvrables. Si cette réponse a entièrement répondu à votre question, veuillez répondre pour m'informer que vous avez reçu cet e-mail et que j'ai résolu ce problème à votre satisfaction. Pièces jointes 7613517300.jmp (6 Ko)