CIAO,
Ho dati con circa 5000 righe.
Ci sono tre colonne (Gruppo, Punteggio e Conteggio)
Valore per gruppo: A, B
Valore per il punteggio compreso tra 0,5 e 1
Il valore per Count è 1 per ogni riga.

Vorrei riassumere i dati per gruppo A e B e raggruppare il valore del punteggio in poche categorie e quindi sommare il conteggio per ciascuna categoria di punteggio, come sotto il formato.

Sto cercando aiuto dalla comunità come creare uno script JSL per eseguire questa attività?
Allego i dati anche qui.
Grazie
Ecco un paio di modi per farlo.Tuttavia, poiché l'esempio riportato di seguito si basa in realtà solo sulla funzionalità primaria di JMP, suggerisco caldamente di leggere i documenti Alla scoperta di JMP e Utilizzo di JMP dalla Libreria della documentazione di JMP, disponibile nel menu a discesa della Guida.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Score Category",
character,
formula(
If(
:Score < .6, "0.50-0.59",
:Score < .8, "0.60-0.79",
:Score < .9, "0.80-0.89",
"0.90-1.00",
)
)
);
dtSum = dt << Summary(
Group( :Group, :Score Category ),
Sum( :Count ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
dtSum << delete columns( :N Rows );
dtSum:Name( "Sum(Count)" ) << set name( "Total_Count" );
// or
dt:score << set property(
"value labels",
{0.5 <= "0.50-0.59" < 0.6, 0.6 <= "0.60-0.79" < 0.8, 0.8 <= "0.80-0.89" < 0.9, 0.9
<= "0.90-1.00" <= 1}
);
dtSum = dt << Summary(
Group( :Group, :Score ),
Sum( :Count ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
dtSum << delete columns( :N Rows );
dtSum:Name( "Sum(Count)" ) << set name( "Total_Count" );Userei un approccio interattivo per acquisire uno script per questo. Innanzitutto, iniziamo con la tabella dei dati:

Ho lasciato fuori Count perché non ne avremo bisogno ma non farà male se c'è.
Ho selezionato la colonna Punteggio, quindi sono passato a Cols, Utilities, Make Binning Formula:

E imposta Offset su 0.5 e bin width su 0.1:

Fare clic con il pulsante destro del mouse sulla nuova colonna (Punteggio raggruppato) e Copia proprietà colonna:

Quindi apri una nuova finestra di script e incolla (ctrl-V), che si traduce in questo JSL:
Add Column Properties(
Value Labels(
{-0.5 = "-0.5 — -0.4", -0.4 = "-0.4 — -0.3", -0.3 = "-0.3 — -0.2", -0.2 =
"-0.2 — -0.1", -0.1 = "-0.1 — 0", 0 = "0 — 0.1", 0.1 = "0.1 — 0.2", 0.2 =
"0.2 — 0.3", 0.3 = "0.3 — 0.4", 0.4 = "0.4 — 0.5", 0.5 = "0.5 — 0.6", 0.6 =
"0.6 — 0.7", 0.7 = "0.7 — 0.8", 0.8 = "0.8 — 0.9", 0.9 = "0.9 — 1", 1 =
"1 — 1.1", 1.1 = "1.1 — 1.2", 1.2 = "1.2 — 1.3", 1.3 = "1.3 — 1.4", 1.4 =
"1.4 — 1.5", 1.5 = "1.5 — 1.6", 1.6 = "1.6 — 1.7", 1.7 = "1.7 — 1.8", 1.8 =
"1.8 — 1.9", 1.9 = "1.9 — 2"}
),
Use Value Labels( 1 ),
Formula( 0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 ) )
)Due cose qui: non ci interessa alcun punteggio inferiore a 0,5 (non esistono nella tua descrizione) o maggiore di 1, quindi possiamo cambiare leggermente le proprietà e modificare i nomi delle etichette in modo che corrispondano a ciò che desideri. Ho anche aggiunto un'istruzione If per catturare il caso limite in cui un punteggio è esattamente 1
Add Column Properties(
Value Labels(
{0.5 = "0.5 — 0.59", 0.6 = "0.6 — 0.69", 0.7 = "0.7 — 0.79", 0.8 = "0.8 — 0.89", 0.9 =
"0.9 — 1"}
),
Use Value Labels( 1 ),
Formula(
If(
(0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )) == 1, 0.9,
0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )
)
)
);(A proposito, quelle etichette non sono tecnicamente accurate, poiché 0,599 verrebbe etichettato come compreso tra 0,5 e 0,59)
Possiamo avvolgere del codice attorno a questo frammento per renderlo riutilizzabile, dove usiamo la tabella di dati corrente, aggiungiamo una nuova colonna chiamata Score Binned e aggiungiamo queste proprietà a quella colonna:
dt = Current Data Table();
dt << New Column("Score Binned", Character);
dt:"Score Binned"n << Add Column Properties(
Value Labels(
{0.5 = "0.5 — 0.59", 0.6 = "0.6 — 0.69", 0.7 = "0.7 — 0.79", 0.8 = "0.8 — 0.89", 0.9 =
"0.9 — 1"}
),
Use Value Labels( 1 ),
Formula(
If(
(0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )) == 1, 0.9,
0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )
)
)
);Ora, tornando al nostro tavolo, Tabelle > Riepilogo ci porta dove vogliamo andare. Inseriamo Group e Score Binned in Group, e questo è tutto ciò di cui abbiamo effettivamente bisogno:


Ora, N Rows è quello che vogliamo, è solo chiamato sbagliato, quindi facciamo doppio clic sulla parola "Source" a sinistra e copiamo lo script di creazione della tabella e sostituiamo il riferimento alla tabella denominata con "dt", la nostra tabella di lavoro, e catturiamo la nuova tabella nella variabile "summ":

dt = Current Data Table();
dt << New Column("Score Binned", Character);
dt:"Score Binned"n << Add Column Properties(
Value Labels(
{0.5 = "0.5 — 0.59", 0.6 = "0.6 — 0.69", 0.7 = "0.7 — 0.79", 0.8 = "0.8 — 0.89", 0.9 =
"0.9 — 1"}
),
Use Value Labels( 1 ),
Formula(
If(
(0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )) == 1, 0.9,
0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )
)
)
);
summ = dt << Summary(
Group( :Group, :Score Binned ),
Freq( "None" ),
Weight( "None" )
);Infine, rinomina N Rows in "Total_Count" come desiderato:
dt = Current Data Table();
dt << New Column("Score Binned", Character);
dt:"Score Binned"n << Add Column Properties(
Value Labels(
{0.5 = "0.5 — 0.59", 0.6 = "0.6 — 0.69", 0.7 = "0.7 — 0.79", 0.8 = "0.8 — 0.89", 0.9 =
"0.9 — 1"}
),
Use Value Labels( 1 ),
Formula(
If(
(0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )) == 1, 0.9,
0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )
)
)
);
summ = dt << Summary(
Group( :Group, :Score Binned ),
Freq( "None" ),
Weight( "None" )
);
summ:"N Rows"n << Set Name("Total_Count");Ora chiudi la tabella di riepilogo, elimina la colonna Score Binned dalla tabella di origine e verifica lo script:

JSL finale di nuovo:
dt = Current Data Table();
dt << New Column("Score Binned", Character);
dt:"Score Binned"n << Add Column Properties(
Value Labels(
{0.5 = "0.5 — 0.59", 0.6 = "0.6 — 0.69", 0.7 = "0.7 — 0.79", 0.8 = "0.8 — 0.89", 0.9 =
"0.9 — 1"}
),
Use Value Labels( 1 ),
Formula(
If(
(0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )) == 1, 0.9,
0.5 + 0.1 * Floor( (:Score - 0.5) / 0.1 )
)
)
);
summ = dt << Summary(
Group( :Group, :Score Binned ),
Freq( "None" ),
Weight( "None" )
);
summ:"N Rows"n << Set Name("Total_Count");Testato sui tuoi dati allegati, che ho letteralmente appena notato :flushed_face:
