Devo colorare le celle in una colonna in base al valore di una determinata cella: entro 1 sigma,> 1 sigma ma <2 sigma,> 2 sigma ma
sigma e> 3 sigma, il sigma è lo standard deviazione della stessa colonna.
Questo script non è completo o efficiente, ma ti dà un'idea.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
mu = Col Mean( :weight );
sd = Col Std Dev( :weight );
lo = mu - 3*sd;
hi = mu + 3*sd;
rows = dt << Get Rows Where( lo <= :weight <= hi );
:weight << Color Cells( "Red", rows );
lo = mu - 2*sd;
hi = mu + 2*sd;
rows = dt << Get Rows Where( lo <= :weight <= hi );
:weight << Color Cells( "Yellow", rows );
lo = mu - sd;
hi = mu + sd;
rows = dt << Get Rows Where( lo <= :weight <= hi );
:weight << Color Cells( "Green", rows );
È possibile migliorare i test booleani per l'efficienza se si dispone di un numero elevato di righe.
Ciao Mark, ho un'altra domanda correlata da questo post. Nel mio frame di dati, ho più di 10 colonne, modificare e incollare il codice che hai fornito è doloroso. Ho provato a creare un ciclo for me stesso, ma non funziona. Potresti fornire qualche consiglio al riguardo? Grazie!
col = dt << ottieni i nomi delle colonne (stringa);
NC = nitems (col);
for (i = 2, i <= NC, i ++,
mu = Col Mean (: Name (col [i]));
sd = Col Std Dev (: Name (col [i]));
lo = mu - 3 * sd;
ciao = mu + 3 * sd;
righe = dt << Ottieni righe dove (lo <=: Nome (col [i]) <= hi);
: Nome (col [i]) << Celle di colore ("Rosso", righe);
righe = dt << Ottieni righe dove (: Nome (col [i]) ciao);
: Nome (col [i]) << Celle di colore ("Viola", righe);
lo = mu - 2 * sd;
ciao = mu + 2 * sd;
righe = dt << Ottieni righe dove (lo <=: Nome (col [i]) <= hi);
: Nome (col [i]) << Celle di colore ("Giallo", righe);
lo = mu - sd;
ciao = mu + sd;
righe = dt << Ottieni righe dove (lo <=: Nome (col [i]) <= hi);
: Nome (col [i]) << Celle di colore ("Verde", righe);
);