Wie berechnet man relative Werte basierend auf der Position eines Basiswerts?Hallo zusammen,
Ich muss den prozentualen Anteil der Werte der Spalte berechnen Wert1 basierend auf der Position des ausgewählten Werts aus der Spalte Wert1 . Als Beispiel, wenn ich das basierend auf dem zweiten Wert in der Spalte tun möchte Wert1 (Position 2 oder Wert 2), die resultierende Spalte Wert1_rel mit relativen Werten sollte so aussehen:

Darüber hinaus können weitere Daten vorhanden sein, die nach Elementen gruppiert und dann für jedes Element der prozentuale Anteil (möglicherweise normalisiert oder relativer Wert ist ein etwas verwirrender Begriff) für alle anderen Werte berechnet werden müssen. Wie kann ich das machen? Wenn die Erklärung nicht gut genug ist, verzeihen Sie bitte und fragen Sie ruhig nach.
Vielen Dank und beste Grüße
Ergebnisse teilen und kommunizierenBetreff: Wie berechnet man relative Werte basierend auf der Position eines Basiswerts?Hallo Brady,
Hoffentlich ist dies zulässig, auch wenn die ursprüngliche Frage bereits beantwortet wurde.
Ich habe ein ähnliches Problem wie Lukasz und habe versucht, Ihre (sehr gute) Antwort an mein Problem anzupassen.
Im Grunde versuche ich auch, eine Spalte durch sich selbst zu teilen, allerdings verwende ich nicht die zweite (oder k-te) als Referenz, sondern habe stattdessen eine dritte Spalte namens label, die ich verwenden möchte, um die Referenzpunkte zu finden. Das Problem, das ich habe, ist, dass ich nicht herausfinden kann, wie ich die „By-Loop“ in meinem Fall zum Laufen bringen kann. Mein Skript macht jetzt nur noch, dass es jeden Wert durch den ersten Wert mit dem Namen „big“ dividiert (ich verstehe warum, aber nicht, wie man das Problem beheben kann).
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
Betreff: Wie berechnet man relative Werte basierend auf der Position eines Basiswerts?Hallo Brady, vielen Dank für den Code und die Erklärung. Es funktioniert perfekt. Beste grüßeBetreff: Wie berechnet man relative Werte basierend auf der Position eines Basiswerts?Hallo,
Sie können diese zugegebenermaßen komplexe Formel (vielleicht stellt jemand eine einfachere vor) in einer neuen Spalte verwenden:
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
Col Cumulative Sum( 1, :Group ) == 2 & :Group == Expr( :Group[Row()] )
)] / :Val
)
)
Es lohnt sich wahrscheinlich, dies zumindest ein wenig auszupacken.
Das Eval( Eval Expr( ))-Konstrukt wird verwendet, um die Auswertung des Ausdrucks Expr ( :Group[Row()] ) zu erzwingen. Ohne dies werden in jeder Zeile mehrere Werte zurückgegeben ... einer für jede Gruppe. Versuchen Sie es, indem Sie den Wrapper Eval ( Eval Expr()) und den Wrapper Expr() entfernen, um zu sehen, was ich meine.
Um den Wert zu bestimmen, den wir im Verhältnis verwenden, müssen wir die 2. Zeile innerhalb der aktuellen Gruppe erfassen. Um diese Zeile zu finden, müssen wir eine Übereinstimmung in der Gruppe (dem zweiten Teil der get rows where-Klausel) und auch als zweiten Wert innerhalb der Gruppe finden. Eine einfache Möglichkeit, dies zu tun, besteht darin, sich die kumulative Summe einer Spalte mit Einsen anzusehen, gruppiert nach :Group. Wenn diese Spalte == 2 ist, haben wir den 2. Wert einer Gruppe. Dies geschieht in mehreren Zeilen, aber der 2. Teil der Klausel beschränkt das Ergebnis auf die Gruppe, die mit der Gruppe der aktuellen Zeile übereinstimmt. Auf diese Weise muss die Tabelle nicht einmal nach Gruppe oder Wert sortiert werden.
Wenn Sie die 2 in der kumulativen Summenäquivalenz zu k ändern, können Sie den k-ten Wert in der Gruppe anstelle des zweiten verwenden.
Prost,
Brady

Betreff: Wie berechnet man relative Werte basierend auf der Position eines Basiswerts?Danke für deinen Kommentar. Ja, in der Tabelle in der vorherigen Version des Beitrags war Null, aber ich dachte, das könnte etwas verwirrend sein, also dachte ich, dass es vielleicht einfacher wäre, nach der Berechnung der gewünschten Werte zu fragen, indem man den Wert aus der zweiten Zeile jeder Artikelgruppe nimmt . Und ja, die „Null“ aus der Spalte „Param1“ sollte nur die Zeilennummer bestimmen.Betreff: Wie berechnet man relative Werte basierend auf der Position eines Basiswerts?Wert1_rel könnte eine Formelspalte sein.
Ich bin mir nicht sicher, wie die Formel auf Ihren Beispieldaten basieren würde.
Normalerweise würde ich relativ zum Mittelwert erwarten Wert1 - Param1 , oder Wert1 - 0 , passt aber nicht zum Beispiel.
Edit: Ich denke, die Formel für Wert1_rel das mit Ihren Daten übereinstimmt, ist 2 / Wert1 . Das können Sie in die Spaltenformel einfügen. Aber...
Ich vermute, Sie haben irgendwo die Null und möchten die Zeilennummer 2 von Null aus nachschlagen. JMP-Datentabellen werden normalerweise so angeordnet, dass alle Daten in einer Zeile zusammengehören. Es kann sinnvoll sein, die Param-Werte als Spalteneigenschaft der Spalte „Wert“ anzugeben. Das erfordert etwas mehr JSL-Skripting, spiegelt aber möglicherweise die Organisation Ihrer Daten besser wider.