Come utilizzare max tra più colonne con la condizione "ottieni righe dove".Sembra una domanda facile ma faccio fatica a risolverla...
Ho questo tipo di tabella dati:

Va fino a 64 che è il parametro "dim" nel mio script.
Sto cercando il massimo e il minimo di tutti median_range_mm 1, 2, 3 ... fino a 64. Ma non voglio che JMP guardi le righe in cui target_status è diverso da 5 o 9.
Come puoi vedere, quando lo stato del target è 10, supera il range 39996.
È più facile da capire con il mio codice:
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
);
);
Si noti che funziona per la prima colonna che non ho parametrizzato. Funziona anche se commento
[dt << get rows where ( name == 5 | name == 9 )]
Qualche idea su come funzionano "ottieni righe dove" o "colonna max ()"?
Grazie
Ri: come utilizzare il massimo tra più colonne con la condizione "ottieni righe dove".@txnelson
@uday_guntupalli
Grazie per le tue risposte. Forse non sono stato abbastanza chiaro nell'esporre il mio problema in effetti.
Il punto di blocco principale è che posso ottenere il massimo della colonna "median_range_mm" con il filtro sulla colonna "target_status" con il codice:
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
Ma una volta che ripeto le colonne:
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 e MinValueVar non ottengono dati "." (Immagino che lo sia<SPAN> Carattere valore mancante per colonne numeriche)</SPAN> .</P><P>Nella finestra di debug penso che il tipo di "nome" e "nom" sia importante. Non è un tipo di colonna...</P><P> </P><P>L'idea è che "name" sia la colonna "target_status 2" poi 3 poi 4 ... con iterazione a p.</P><P>Stessa idea con "nom" che è la colonna "median_range_mm 2" poi 3 poi 4 ....</P><P>Quindi, per p = 2, sto cercando il massimo di median_range_mm 2 dove "target_status 2" == 5 o 9.</P><P>Allora p = 3 ... fino a 64</P><P> </P><P>Infine, se "massimo di median_range_3" > "massimo di median_range_2" allora "massimo di median_range_3 prende il valore max:</P><PRE><CODE class=" language-jsl">If(
MaxValueVar > maxValue, maxValue = MaxValueVar,
MinValueVar < minValue, minValue = MinValueVar
);
Grazie per aver letto,
Ri: come utilizzare il massimo tra più colonne con la condizione "ottieni righe dove".Penso che questa potrebbe essere una soluzione per quello che stai cercando di fare
min_value = Col Quantile( If( Row() <=64 & ( :target_status == 5 |
:target_status == 9 ),
:median_range_mm
,
.
), .5<BR />);Ri: come utilizzare il massimo tra più colonne con la condizione "ottieni righe dove".@Rob128 ,
Sto lottando per capire esattamente cosa vuoi?Provo a mostrarti alcuni passaggi:
Quanto segue dovrebbe darti tutte le righe, dove target_status è 5 o 9, come hai provato.
SR = dt << Select Where(:target_status ==5 | :target_status ==9) << get selected rows;
Ora, hai l'elenco delle righe in cui è soddisfatta la tua condizione, la prossima cosa che vuoi se ho capito la tua domanda è il valore minimo e massimo?
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 );
Sono abbastanza sicuro che ci sono molti altri modi per farlo, ma sto cercando di scomporlo in passaggi in modo che tu possa seguire il pensiero. Se questo non è ciò che stai cercando, puoi spiegare un po' più chiaramente cosa stai cercando, per favore?