JSL: utilizza una casella di controllo con i livelli di una colonnaCiao,
Spero tu stia bene.
Ho una domanda sugli script delle caselle di controllo in JMP.
Ho un set di dati con una variabile "forza" e desidero creare un sottoinsieme se il set di dati è conforme a una casella di controllo che presenta tutti i punti di forza nel set di dati. Lo scopo è che l'utente selezioni nella casella di controllo i punti di forza di interesse e che le righe nel set di dati siano selezionate in base ai punti di forza selezionati nella casella di controllo. Poiché i punti di forza non sono necessariamente gli stessi in base al set di dati, mi chiedevo se fosse possibile "estrarre" i valori univoci dei punti di forza dalla colonna e quindi presentare i punti di forza nella casella di controllo per scegliere nella casella di controllo il valore punti di forza di interesse. Voglio che lo script sia il più generale possibile per analizzare tutti i set di dati con tutti i possibili punti di forza.
Grazie mille e buona giornata,
Jean
Automazione e scriptingRi: JSL: utilizzare una casella di controllo con i livelli di una colonnaCiao di nuovo,
Ho un'ultima domanda: come posso modificare il codice per denominare ciascun sottoinsieme in base ai punti di forza selezionati nella casella di controllo?
Grazie mille e buona giornata,
Jean
Ri: JSL: utilizzare una casella di controllo con i livelli di una colonnaTutto bene !
Grazie mille !
Buona giornata,
Jean
Ri: JSL: utilizzare una casella di controllo con i livelli di una colonna
È il sottoinsieme memorizzato nella variabile dt2
Solo se definisci una variabile dt2 
Puoi farlo:
dt2 = dt << subset(
selected rows(1),
selected columns only(0)
);
Esiste un comando per chiudere o nascondere il sottoinsieme del set di dati
Dato che l'abbiamo appena creato, presumo che non vogliamo chiuderlo, ma se non vuoi che l'utente lo veda puoi renderlo invisibile:
dt2 = dt << subset( invisible,
selected rows(1),
selected columns only(0)
);
Se ho già un set di dati aperto in Jmp, come posso definirlo in a dt variabile
Puoi associare la variabile dt alla tabella attualmente aperta,
dt = current data table();
o se ci sono più tabelle aperte, facendo riferimento alla tabella:
dt = data table("strength data");
Infine, una domanda che non hai fatto ma che potresti farti.Una volta che l'utente ha cliccato sul pulsante per creare il sottoinsieme, se si desidera chiudere la finestra contenente le caselle di controllo è possibile aggiungere le seguenti righe alla fine del doSubset funzione:
cr = current report();
cr << close window;
Buona fortuna.
Ri: JSL: utilizzare una casella di controllo con i livelli di una colonnaGrazie mille ! Il sottoinsieme è memorizzato nella variabile dt2?
Ri: JSL: utilizzare una casella di controllo con i livelli di una colonnaGrazie mille !
Due ultime domande:
- Esiste un comando per chiudere o nascondere il sottoinsieme del set di dati?
- Se ho già un set di dati aperto in Jmp, come posso definirlo in a dt variabile?
Grazie mille e buona giornata,
Jean
Ri: JSL: utilizzare una casella di controllo con i livelli di una colonna'for ciascuno' è una novità della versione 16. Se hai una versione precedente puoi utilizzare un ciclo for più tradizionale:
for (i=1,i<=nitems(selected),i++,
rows = dt << select where(:Strength==selected[i],
current selection("extend")
);
);Ri: JSL: utilizzare una casella di controllo con i livelli di una colonnaCiao Davide, grazie mille per il tuo aiuto!
Tuttavia, quando il codice viene eseguito, ho il seguente errore:

Come posso risolverlo?
Grazie mille e buona giornata,
Jean
Ri: JSL: utilizzare una casella di controllo con i livelli di una colonnaUn esempio alternativo:
Names Default to Here( 1 );
// mock up data set with Strength
dt = New Table( "Strength",
New Column( "Strength", "Character", "Nominal",
Values( {"Intelligent", "Innovative", "Initiative", "Introvert", "Intelligent",
"Innovative", "Initiative", "Introvert", "Intelligent", "Innovative",
"Initiative", "Introvert"} )
)
);
// get unique values from the strength column
summarize(dt,levels=by(:strength));
// construct a window containing checkboxes
NewWindow("Selection",
BorderBox(top(20),bottom(20),left(20),right(20),
VListBox(
TextBox("Select values:"),
here:cb = CheckBox(levels),
SpacerBox(size(0,20)),
ButtonBox("Create Subset",doSubset())
)
)
);
// define function to perform when button is cliccked
doSubset = function({},{default local},
dt = current data table();
dt << clear select;
// get user selections
selected = here:cb << get selected;
// iterate over each of the selected values
// and select the associated rows
for each( {selection},selected,
rows = dt << select where(:Strength==selection,
current selection("extend")
);
);
// create a subset table
dt << subset(
selected rows(1),
selected columns only(0)
);
dt << clear select;
);
Ri: JSL: utilizzare una casella di controllo con i livelli di una colonnaQuesto esempio illustra un approccio che potrebbe funzionare.
Names Default to Here( 1 );
// mock up data set with Strength
dt = New Table( "Strength",
New Column( "Strength", "Character", "Nominal",
Values( {"Intelligent", "Innovative", "Initiative", "Introvert", "Intelligent",
"Innovative", "Initiative", "Introvert", "Intelligent", "Innovative",
"Initiative", "Introvert"} )
)
);
// present user with choices
choice = Associative Array( :Strength ) << Get Keys;
New Window( "Choose Strengths",
Outline Box( "Pick Your Strengths from the Choices Below",
Panel Box( "Strengths",
Check Box( choice,
<< Set Function(
Function( { me, index }, { Default Local },
selection = me << Get Selected;
n = N Items( selection );
dt << Clear Select;
If(
n == 1,
Eval(
Substitute(
Expr( dt << Select Where( :Strength == sss ) ),
Expr( sss ), Name Expr( selection[1] )
)
),
n > 0,
sel expr = Expr( Or() );
For( i = 1, i <= n, i++,
equality = Substitute(
Expr( :Strength == ccc ),
Expr( ccc ), selection[i]
);
Insert Into( sel expr, Name Expr( equality ) );
);
Eval(
Substitute(
Expr( dt << Select Where( eee ) ),
Expr( eee ), Name Expr( sel expr )
)
);
);
);
)
)
)
)
);