JSL : Utiliser une case à cocher avec les niveaux d'une colonneBonjour,
J'espère que tu vas bien.
J'ai une question sur les scripts des cases à cocher dans JMP.
J'ai un ensemble de données avec une variable "force" et je souhaite créer un sous-ensemble si l'ensemble de données est défini selon une case à cocher présentant toutes les forces de l'ensemble de données. Le but est que l'utilisateur coche dans la case les forces qui l'intéressent et que les lignes de l'ensemble de données soient sélectionnées en fonction des forces cochées dans la case à cocher. Comme les points forts ne sont pas forcément les mêmes selon le jeu de données, je me demandais s'il était possible "d'extraire" les valeurs uniques des points forts de la colonne puis de présenter les points forts dans la case à cocher afin de choisir dans la case à cocher le points forts d’intérêt. Je souhaite que le script soit aussi général que possible pour analyser tous les ensembles de données avec toutes les forces possibles.
Merci beaucoup et bonne journée,
Jean
Automatisation et scriptsRe: JSL : Utiliser une case à cocher avec les niveaux d'une colonneBonjour à nouveau,
J'ai une toute dernière question : comment modifier le code pour nommer chaque sous-ensemble par les points forts qui ont été cochés dans la case à cocher ?
Merci beaucoup et bonne journée,
Jean
Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonneTout bon !
Merci beaucoup !
Passe une très bonne journée,
Jean
Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonne
Le sous-ensemble est-il stocké dans la variable dt2
Seulement si vous définissez une variable dt2 
Tu peux le faire:
dt2 = dt << subset(
selected rows(1),
selected columns only(0)
);
Existe-t-il une commande pour fermer ou masquer le sous-ensemble de l'ensemble de données
Puisque nous venons juste de le créer, je suppose que nous ne voulons pas le fermer, mais si vous ne voulez pas que l'utilisateur le voie, vous pouvez le rendre invisible :
dt2 = dt << subset( invisible,
selected rows(1),
selected columns only(0)
);
Si j'ai déjà un jeu de données ouvert dans Jmp, comment puis-je le définir dans un dt variable
Vous pouvez soit associer la variable dt à la table ouverte actuelle,
dt = current data table();
ou s'il y a plusieurs tables ouvertes, en référençant la table :
dt = data table("strength data");
Enfin, une question que vous n’avez pas posée mais que vous vous posez peut-être.Une fois que l'utilisateur a cliqué sur le bouton pour créer le sous-ensemble, si vous souhaitez fermer la fenêtre contenant les cases à cocher, vous pouvez ajouter les lignes suivantes à la fin du faireSous-ensemble fonction:
cr = current report();
cr << close window;
Bonne chance.
Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonneMerci beaucoup ! Le sous-ensemble est-il stocké dans la variable dt2 ?
Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonneMerci beaucoup !
Deux dernières questions :
- Existe-t-il une commande pour fermer ou masquer le sous-ensemble de l'ensemble de données ?
- Si j'ai déjà un jeu de données ouvert dans Jmp, comment puis-je le définir dans un dt variable?
Merci beaucoup et bonne journée,
Jean
Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonne'for each' est nouveau dans la version 16. Si vous disposez d'une ancienne version, vous pouvez utiliser une boucle for plus traditionnelle :
for (i=1,i<=nitems(selected),i++,
rows = dt << select where(:Strength==selected[i],
current selection("extend")
);
);Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonneBonjour David, merci beaucoup pour votre aide !
Cependant, lorsque le code est exécuté, j'ai l'erreur suivante :

Comment puis-je le réparer ?
Merci beaucoup et bonne journée,
Jean
Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonneUn exemple alternatif :
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;
);
Re: JSL : Utiliser une case à cocher avec les niveaux d'une colonneCet exemple illustre une approche qui pourrait fonctionner.
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 )
)
);
);
);
)
)
)
)
);