Comment calculer des valeurs relatives basées sur une position d'une valeur de base ?Bonjour tout le monde,
Je dois calculer la part en pourcentage des valeurs de la colonne Valeur1 en fonction de la position de la valeur sélectionnée dans la colonne Valeur1 . Par exemple, si je veux le faire en fonction de la deuxième valeur de la colonne Valeur1 (position 2 ou valeur 2), la colonne résultante Valeur1_rel avec des valeurs relatives devrait ressembler à ceci :

De plus, il peut y avoir plus de données qui doivent être regroupées par élément, puis pour chaque élément, une part de pourcentage calculée (peut-être que la valeur normalisée ou relative est un terme un peu déroutant) pour toutes les autres valeurs. Comment puis je faire ça? Si l'explication n'est pas assez bonne, veuillez pardonner et n'hésitez pas à demander.
Merci et cordialement
Partage et communication des résultatsRe : Comment calculer des valeurs relatives en fonction d'une position d'une valeur de base ?Salut Brady,
j'espère que cela est autorisé même si la question initiale a déjà reçu une réponse.
J'ai un problème similaire à celui de lukasz, et j'ai essayé d'adapter votre (très bonne) réponse à mon problème.
Fondamentalement, j'essaie également de diviser une colonne par elle-même, mais je n'utilise pas la 2ème (ou la kème) comme référence mais à la place j'ai une troisième colonne nommée label que je veux utiliser pour trouver les points de référence. Le problème que j'ai est que je n'arrive pas à comprendre comment faire fonctionner la "by-loop" dans mon cas, tout ce que mon script fait maintenant est de diviser chaque valeur par la première valeur nommée "big" (je comprends pourquoi, mais pas comment y remédier).
c << new column("Rel", numeric, continuous, formula(
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
label == "big" & :Group == Expr( :Group[Row()] )
)] / :Val
)
));
)
/V
Re : Comment calculer des valeurs relatives en fonction d'une position d'une valeur de base ?Salut Brady, merci beaucoup pour le code et l'explication. Cela fonctionne parfaitement. CordialementRe : Comment calculer des valeurs relatives en fonction d'une position d'une valeur de base ?Salut,
Vous pouvez utiliser cette formule certes complexe (peut-être que quelqu'un en présentera une plus simple) dans une nouvelle colonne :
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
Col Cumulative Sum( 1, :Group ) == 2 & :Group == Expr( :Group[Row()] )
)] / :Val
)
)
Cela vaut probablement la peine de le déballer au moins un peu.
La construction Eval( Eval Expr( )) est utilisée pour forcer l'évaluation de l'expression Expr ( :Group[Row()] ). Sans cela, plusieurs valeurs seront renvoyées sur chaque ligne... une pour chaque groupe. Essayez-le en supprimant le wrapper Eval ( Eval Expr ()) et le wrapper Expr() pour voir ce que je veux dire.
Pour déterminer la valeur que nous utiliserons dans le rapport, nous devons saisir la 2e ligne du groupe actuel. Pour trouver cette ligne, nous devons faire correspondre le groupe (la deuxième partie de la clause get rows where) et doit également correspondre à la 2e valeur du groupe. Un moyen simple de le faire est de regarder la somme cumulée d'une colonne de 1, regroupés par :Group. Lorsque cette colonne == 2, nous avons la 2ème valeur d'un groupe. Cela se produit dans plusieurs lignes, mais la 2ème partie de la clause limite le résultat au groupe correspondant au groupe de la ligne actuelle. De cette façon, le tableau n'a même pas besoin d'être trié par groupe ou valeur.
Changer le 2 dans l'équivalence de la somme cumulée en k, vous permet d'utiliser la kème valeur dans le groupe au lieu de la 2ème.
Acclamations,
brady

Re : Comment calculer des valeurs relatives en fonction d'une position d'une valeur de base ?Merci pour le commentaire. Oui, il y avait zéro dans le tableau dans la version précédente de l'article, mais j'ai pensé que cela pourrait être un peu déroutant, alors j'ai pensé qu'il serait peut-être plus simple de poser des questions sur le calcul des valeurs souhaitées en prenant la valeur de la deuxième ligne de chaque groupe d'éléments . Et oui, le "zéro" de la colonne Param1 ne devait déterminer que le numéro de ligne.Re : Comment calculer des valeurs relatives en fonction d'une position d'une valeur de base ?Valeur1_rel peut être une colonne de formules.
Je ne sais pas quelle serait la formule basée sur vos données d'exemple.
Habituellement, je m'attendrais à ce que ce soit relatif Valeur1 - Param1 , ou Valeur1 - 0 , mais aucun ne correspond à l'exemple.
Edit: je pense que la formule pour Valeur1_rel qui correspond à vos données est 2 / Valeur1 . Vous pouvez mettre cela dans la formule de la colonne. Mais...
Je soupçonne que vous avez zéro, de quelque part, et que vous voulez rechercher la ligne numéro 2 à partir de zéro. Les tableaux de données JMP sont généralement organisés avec toutes les données d'une ligne appartenant ensemble. Il peut être judicieux de placer les valeurs Param en tant que propriété de colonne de la colonne Valeur. Cela prendra un peu plus de scripts JSL, mais pourrait mieux refléter l'organisation de vos données.