So verwenden Sie das Maximum für mehrere Spalten mit der Bedingung „Zeilen abrufen wo“.Es scheint eine einfache Frage zu sein, aber ich habe Mühe, sie zu lösen ...
Ich habe diese Art von Datentabelle:

Es geht bis 64, was in meinem Skript der Parameter „dim“ ist.
Ich suche das Maximum und Minimum aller median_range_mm 1, 2, 3 ... bis 64. Aber ich möchte nicht, dass JMP Zeilen betrachtet, in denen target_status nicht 5 oder 9 ist.
Wie Sie sehen können, liegt der Zielstatus bei 10 bei 39996.
Mit meinem Code ist es einfacher zu verstehen:
maxValueVar = 0 ;
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] );
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] );
For( p = 2, p <= dim, p++,
name = Column(dt, "target_status " || Char( p ));
nom = Column(dt, "median_range_mm " || Char( p )); // browse every columns of median_range_mm
MaxValueVar = Col Max( nom [dt << get rows where ( name == 5 | name == 9 )] );
If(
maxValueVar > maxValue, maxValue = maxValueVar,
minValueVar < minValue, minValue = minValueVar
);
);
Beachten Sie, dass es für die erste Spalte funktioniert, die ich nicht parametrisiert habe. Es funktioniert auch, wenn ich kommentiere
[dt << get rows where ( name == 5 | name == 9 )]
Irgendeine Idee, wie „Zeilen wohin abrufen“ oder „Spalte max ()“ funktionieren?
Danke
Betreff: So verwenden Sie das Maximum für mehrere Spalten mit der Bedingung „Zeilen abrufen, wo“.@txnelson
@uday_guntupalli
Danke für deine Antworten. Vielleicht habe ich mein Problem tatsächlich nicht deutlich genug dargelegt.
Der Hauptblockierungspunkt besteht darin, dass ich das Maximum der Spalte „median_range_mm“ mit dem Filter für die Spalte „target_status“ mit folgendem Code ermitteln kann:
maxValue = Max( :median_range_mm [dt << get rows where( :target_status == 5 | :target_status == 9 ) ] ); // ==> OK
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 | :target_status == 9 )] ); // ==> OK
Aber sobald ich über Spalten iteriere:
For( p = 2, p <= dim, p++,
name = Column("target_status " || Char( p ));
nom = Column("median_range_mm " || Char( p ));
MaxValueVar = Max( nom [dt << get rows where ( name == 5 | name == 9 )] );</CODE></PRE><P>MaxValueVar und MinValueVar erhalten keine Daten „.“ (Ich denke, das ist es<SPAN> Fehlendes Wertzeichen für numerische Spalten)</SPAN> .</P><P>Im Debugging-Fenster denke ich, dass die Art von „Name“ und „Nom“ wichtig ist. Es ist kein Spaltentyp ...</P><P> </P><P>Die Idee ist, dass „name“ die Spalte „target_status 2“ ist, dann 3, dann 4 ... mit Iteration auf p.</P><P>Dieselbe Idee mit „nom“, das ist die Spalte „median_range_mm 2“, dann 3, dann 4 ....</P><P>Für p = 2 suche ich also nach dem Maximum von median_range_mm 2, wobei „target_status 2“ == 5 oder 9 ist.</P><P>Dann ist p = 3 ... bis 64</P><P> </P><P>Wenn schließlich „Maximum von Median_Bereich_3“ > „Maximum von Median_Bereich_2“ ist, dann nimmt „Maximum von Median_Bereich_3“ den maxValue an:</P><PRE><CODE class=" language-jsl">If(
MaxValueVar > maxValue, maxValue = MaxValueVar,
MinValueVar < minValue, minValue = MinValueVar
);
Danke fürs Lesen,
Betreff: So verwenden Sie das Maximum für mehrere Spalten mit der Bedingung „Zeilen abrufen, wo“.Ich denke, das könnte eine Lösung für das sein, was Sie versuchen
min_value = Col Quantile( If( Row() <=64 & ( :target_status == 5 |
:target_status == 9 ),
:median_range_mm
,
.
), .5<BR />);Betreff: So verwenden Sie das Maximum für mehrere Spalten mit der Bedingung „Zeilen abrufen, wo“.@Rob128 ,
Es fällt mir schwer, genau zu verstehen, was Sie wollen?Lassen Sie mich versuchen, Ihnen einige Schritte zu zeigen:
Im Folgenden sollten Sie alle Zeilen erhalten, in denen target_status entweder 5 oder 9 ist, wie Sie es versucht haben.
SR = dt << Select Where(:target_status ==5 | :target_status ==9) << get selected rows;
Jetzt haben Sie die Liste der Zeilen, in denen Ihre Bedingung erfüllt ist. Das nächste, was Sie wollen, wenn ich Ihre Frage verstehe, ist der Minimal- und Maximalwert?
MedianValues = dt:median_range_mm << Get Values;
MedianValuesDes = MedianValues[SR]; // Filter out and get only the rows with target status of 5 or 9
MaxVal = Max(MedianValuesDes );
MinVal = Min(MedianValuesDes );
Ich bin mir ziemlich sicher, dass es noch viele weitere Möglichkeiten gibt, aber ich versuche, es in Schritte zu unterteilen, damit Sie dem Gedanken folgen können. Wenn dies nicht das ist, was Sie suchen, können Sie bitte etwas klarer erklären, was Sie suchen?