Come calcolare i valori relativi basati su una posizione di un valore di base?Ciao a tutti,
Devo calcolare la quota percentuale dei valori della colonna Valore1 in base alla posizione del valore selezionato dalla colonna Valore1 . Ad esempio, se voglio farlo in base al secondo valore nella colonna Valore1 (posizione 2 o valore 2), la colonna risultante Valore1_rel con valori relativi dovrebbe essere simile a questo:

Inoltre, possono esserci più dati che devono essere raggruppati per articolo e quindi per ogni articolo quota percentuale calcolata (forse normalizzata o valore relativo è un termine un po' confuso) per tutti gli altri valori. Come lo posso fare? Se la spiegazione non è abbastanza buona, per favore perdona e sentiti libero di chiedere.
Grazie e cordiali saluti
Condivisione e comunicazione dei risultatiRi: Come calcolare i valori relativi in base a una posizione di un valore di base?Ciao Brady,
si spera che ciò sia consentito anche se alla domanda originale è già stata data risposta.
Ho un problema simile a lukasz e ho cercato di modificare la tua (molto buona) risposta per adattarla al mio problema.
Fondamentalmente sto anche cercando di dividere una colonna da sola, tuttavia non sto usando la 2a (o kth) come riferimento ma ho invece una terza colonna chiamata label che voglio usare per trovare i punti di riferimento. Il problema che ho è che non riesco a capire come far funzionare il "by-loop" nel mio caso, tutto ciò che fa il mio script ora è dividere ogni valore per il primo valore chiamato "big" (capisco perché, ma non come risolverlo).
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
Ri: Come calcolare i valori relativi in base a una posizione di un valore di base?Ciao Brady, grazie mille per il codice e la spiegazione. Funziona perfettamente. Distinti salutiRi: Come calcolare i valori relativi in base a una posizione di un valore di base?CIAO,
Puoi usare questa formula certamente complessa (forse qualcuno ne presenterà una più semplice) in una nuova colonna:
Eval(
Eval Expr(
:Val[(:Group << get data table) << get rows where(
Col Cumulative Sum( 1, :Group ) == 2 & :Group == Expr( :Group[Row()] )
)] / :Val
)
)
Probabilmente vale la pena disimballarlo almeno un po'.
Il costrutto Eval( Eval Expr( )) viene utilizzato per forzare la valutazione dell'espressione Expr ( :Group[Row()] ). Senza questo, verranno restituiti diversi valori su ogni riga... uno per ogni gruppo. Provalo rimuovendo il wrapper Eval ( Eval Expr ()) e il wrapper Expr() per vedere cosa intendo.
Per determinare il valore che useremo nel rapporto, dobbiamo prendere la seconda riga all'interno del gruppo corrente. Per trovare questa riga, dobbiamo corrispondere al gruppo (la seconda parte della clausola get rows where) e dobbiamo anche corrispondere come secondo valore all'interno del gruppo. Un modo semplice per farlo è guardare la somma cumulativa di una colonna di 1, raggruppata per :Group. Quando questa colonna == 2, abbiamo il secondo valore di qualche gruppo. Ciò accade in più righe, ma la seconda parte della clausola limita il risultato al gruppo corrispondente al gruppo della riga corrente. In questo modo, la tabella non ha nemmeno bisogno di essere ordinata per gruppo o valore.
Modificando il 2 nell'equivalenza della somma cumulativa in k, è possibile utilizzare il k-esimo valore nel gruppo anziché il 2°.
Saluti,
Brady

Ri: Come calcolare i valori relativi in base a una posizione di un valore di base?Grazie per il commento. Sì, c'era zero nella tabella nella versione precedente del post, ma ho pensato che potesse creare un po' di confusione, quindi ho pensato che forse sarebbe stato più semplice chiedere informazioni sul calcolo dei valori desiderati prendendo il valore dalla seconda riga di ogni gruppo di elementi . E sì, lo "zero" dalla colonna Param1 doveva determinare solo il numero di riga.Ri: Come calcolare i valori relativi in base a una posizione di un valore di base?Valore1_rel potrebbe essere una colonna formula.
Non sono sicuro di quale sarebbe la formula basata sui tuoi dati di esempio.
Di solito mi aspetto che relativo significhi Valore1 - Param1 , O Valore1 - 0 , ma nessuno dei due corrisponde all'esempio.
Modifica: penso che la formula per Valore1_rel che corrisponde ai tuoi dati è 2 / Valore1 . Puoi inserirlo nella formula della colonna. Ma...
Sospetto che tu abbia zero, da qualche parte, e vuoi cercare la riga numero 2 da zero. Le tabelle di dati JMP sono generalmente organizzate con tutti i dati su una riga che appartengono insieme. Potrebbe avere senso inserire i valori Param come proprietà di colonna della colonna Value. Ciò richiederà un po 'più di scripting JSL, ma potrebbe riflettere meglio l'organizzazione dei tuoi dati.