Problème dans le script JMP pour la boucleBonjour, j'ai deux questions -
Ques1 --
J'ai une donnée simple (jointe) et un script qui fonctionne bien mais tant que je veux le convertir en une boucle for. Ne pas obtenir la bonne chose.
BUT - Je veux la valeur de résistance top10% pour chaque courant. Mes données ne sont pas symétriques, cela signifie que le nombre de points de données pour chaque courant est différent.
Dans les mêmes données, il n'y a que 7 valeurs actuelles et dans les données réelles, cela peut prendre des centaines de valeurs.
Approche - Je génère une table Quantile, puis je compare ma valeur de résistance à 90% de valeur quantile et j'ajoute une colonne supplémentaire "Top10%". Tout fonctionne bien pour les exemples de données avec 7 valeurs actuelles, mais j'ai besoin d'une boucle pour cela. Les super utilisateurs peuvent-ils m'indiquer quelle est l'erreur que je fais dans ma boucle for, cela aidera à apprendre comment implémenter les boucles for.?
De l'aide ?
Ques2 --Quel est le meilleur moyen d'obtenir les 95 % de données les plus importantes ?
Toute aide ici?
Modélisation statistique avancéeAutomatisation et scriptExploration et visualisation des donnéesPersonnalisation de masseIngénierie de la qualité et des procédésRe : Problème dans le script JMP pour la boucleMerci pour l'explication claire et agréable. Très utile pour apprendre comment fonctionnent les formules de colonne. Merci encore.
Re : Problème dans le script JMP pour la boucleConcernant votre logique de boucle For()
- Une colonne ne peut contenir qu'une seule formule.Avoir la définition de formule dans la boucle For() spécifierait une formule différente pour chaque boucle.Je ne sais pas exactement ce que ferait JMP, au mieux, il remplacerait chaque formule lorsqu'une nouvelle était créée, se retrouvant avec la dernière créée.
- En définissant la valeur "Fail" dans chaque If, la seule fois où votre logique serait exacte, c'est si le dernier niveau est le niveau de la ligne actuelle.Sinon, disons que le niveau 3 est le niveau actuel pour la ligne donnée.JMP définirait la valeur dans l'instruction If pour le niveau 1 sur Échec, le niveau 2 sur Échec, le niveau 3 sur Top10 %, mais la boucle For() continue, donc le test du niveau 4 entraînera un échec.... ..... et tout le reste des niveaux.
- Avec une formule pour une colonne qui a des valeurs variables définies en dehors de la formule (c'est-à-dire dtF2, dtQ et les références aux colonnes dans la table de données dtQ), ces valeurs et la table de données devront être présentes chaque fois que la table de données avec le la formule est ouverte.Donc, ce que vous devez faire, lorsque vous utilisez de telles formules, est de supprimer la formule, une fois que la table de données a exécuté la formule.
dtF2:Name("Top10%") << delete formula;
Voici une version de la formule qui, je pense, fonctionnerait ..... Je ne l'ai pas testée, mais je pense que vous verrez l'approche.
dtF2 << New Column( "Top10%",
character,
FORMULA(
For( i = 1, N Rows( dtQ ), i++,
x = "";
If( dtF2:Current == dtQ:Level[i] & dtF2:Name( "Res" ) >= dtQ:Name( "90%" )[i],
x = "Top10"
);
);
If( x == "", x = "Fail" );
x;
)
);Re : Problème dans le script JMP pour la boucleOui, parfaitement bien. Une façon bien meilleure et plus simple de le faire. Je ne savais pas que nous pouvions également obtenir un quantile à partir d'un tableau récapitulatif. Je l'implémente comme tu l'as décrit.
Mis à part le quantile et les données des 10 % supérieurs, un commentaire, qu'est-ce qui n'allait pas dans ma "boucle for" ?
Merci pour l'aide.
Re : Problème dans le script JMP pour la boucleJe crois que le script ci-dessous est une méthodologie plus simple pour obtenir les résultats souhaités

Names Default To Here( 1 );
dtF2 = Data Table( "Final_Data" );
dtSum = dtF2 << Summary(
invisible,
Group( :Current ),
Quantiles( 90, :Res ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "stat" ),
link to original data table( 0 )
);
dtSum << delete columns( N Rows );
dtF2 << Update(
With( dtSum ),
Match Columns( :Current = :Current )
);
Close( dtSum, nosave );
dtF2 << New Column( "Top10%",
character,
formula( If( :Res >= :Quantiles90, "Top10" ) )
);