Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/thenBonjour, j'essaie de créer et de remplir un groupe de nouvelles colonnes en fonction des résultats d'une instruction if/then.
ÉTAPE 1:
Je dois créer les nouvelles colonnes vides qui seront remplies.(55 en tout)
(Chaque nouvelle colonne est un champ numérique continu.)
Le nom de chaque colonne correspondra au nom de chacun des 55 composés du groupe suivi de « _ppt ».Par exemple, le composé nommé « 4:2 FTS » donne lieu à une nouvelle colonne nommée [4:2 FTS_ppt].
ÉTAPE 2:
Ligne par ligne, je remplirais les nouvelles colonnes à l'aide d'une instruction if/then qui évalue trois colonnes existantes associées à chacun des 55 composés du groupe.Spécifiquement,
si [RES_VALUE_4:2 FTS] >= [RL_4:2 FTS] ALORS [4:2 FTS_ppt] = [RES_VALUE_4:2 FTS]
si [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] ET DETECT_FLAG_4:2 FTS] = N ET [RL_4:2 FTS] <= 3 ALORS [4:2 FTS_ppt] = 0,0009.
si [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] ET DETECT_FLAG_4:2 FTS] = N ET [RL_4:2 FTS] > 3 ALORS [4:2 FTS_ppt] = NULL.
Voici les noms de colonnes existants avec un suffixe qui est le nom du composé.J'utilise JMP Pro 17.0.



Tout conseil serait le plus apprécié !
Automatisation et scriptsOrganisation du contenuRe : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/then- L'objectif de la communauté de discussion n'est pas d'être une source permettant aux utilisateurs de JMP d'obtenir des scripts écrits à leur demande.Il est là pour aider les utilisateurs à apprendre JMP.
- Compte tenu du pseudo-code que vous avez fourni, il est clair que vous devez prendre le temps de lire le Guide de script JMP.Il est disponible dans la bibliothèque de documentation JMP sous le menu déroulant Aide de JMP.
- Vous trouverez ci-dessous une tentative pour vous aider à résoudre votre problème.Il n'est pas testé, puisque je n'ai aucune de vos données.Veuillez prendre le temps d'étudier et d'apprendre le code.Les fonctions sont bien documentées dans le Scripting Index et dans la JSL Scripting Reference.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" || "\!",
numeric,
continuous,
formula(
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " || comp ||
"\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL " || comp ||
"\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
Re : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/thenMerci Jim.Oui, c'est bien compris.Je dois passer plus de temps sur les fondations de jsl avant de me lancer dans mon travail.
Le code ci-dessus a créé correctement toutes les colonnes mais la formule ne produit que des valeurs nulles (".").Je n'ai pas réussi à résoudre l'erreur, mais je continuerai d'essayer.Merci encore.
Re : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/thenJe vais y jeter un œil si vous pouvez fournir des exemples de données.
Re : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/thenMerci Jim.J'ai joint le tableau jmp ci-dessous qui contient un petit sous-ensemble de lignes de mon ensemble de données.
Re : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/thenDeux choses devaient être changées.
- La valeur de la variable x utilisée dans la formule doit être initialisée pour chaque exécution de lignes.
- L'exécution de la formule doit être NON supprimée.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" ||
"\!",
numeric,
continuous, formula(
x=.;
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " ||
comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
dt << Suppress Formula Eval( 0 );
Re : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/thenMerci Jim.J'avais l'intention de revenir peu de temps après votre réponse, mais j'ai essayé de dubuger le code.Je ne l'ai pas fait fonctionner pour une raison quelconque.J'ai utilisé le débogueur et j'ai reçu ce message :

Je voulais juste que vous sachiez que j'ai reçu votre contribution - je continuerai d'essayer.Merci.
Re : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/then
Re : Je dois remplir une nouvelle colonne en fonction des résultats d'une instruction if/thenOui!Je viens juste de le faire fonctionner.Merci encore pour votre aide à ce sujet !