Erreur lors de la création d'invites<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Je suis nouveau avec JMP et j'ai trouvé ces bons exemples sur la création de jolies invites dans le livre "Jump into JMP scripting".
Pourtant, je ne sais pas comment créer une invite simple et créer un sous-ensemble avec des scripts basés sur ces valeurs que je sélectionne à partir de cette invite.
L'invite doit "collecter" les valeurs d'une variable de colonne de caractères "yearm", par exemple, je voudrais créer un générateur de graphiques basé sur les valeurs yearmonth entre [201007, 201012].
Tous les commentaires sont les bienvenus. Merci d'avance de m'aider à résoudre ce problème.
Message d'erreur : indice non valide (doit être un nombre ou une liste de nombres){1} dans l'accès ou l'évaluation de 'Indice' , trimestre[select1 << get]
Voici du code :
Summarize( quarter= By( Column( dt, "yearm" ) ) );
nw = New Window( "Choisir les trimestres",
hb = Panel Box( "Choisir annéem",
select1 = List Box (trimestre,
dt << Sélectionnez Où(
:yearm== quarter[select1 << get] );
selRows = dt << Obtenir les lignes sélectionnées ;
)
),
Boîte à boutons( "OK",
nw << Fermer la fenêtre ;
dt << Sélectionnez Où(
:annéem== trimestre[select1 << get]
);
/* Les lignes sélectionnées sont sous-ensembles dans une nouvelle table. */
dt << Subset( Nom de la table de sortie( "Quartiers choisis" ) );
)
);
Re : Erreur lors de la création d'invitesOk, je vais essayer et répondre quand mon JMP sera mis à jour à 10. La mise à jour des médias est arrivée mais elle attend toujours.
Merci beaucoup, vous êtes un tel utilisateur pro avec cela. J'espère que j'apprends aussi quelque chose.
Re : Erreur lors de la création d'invitesAie! Alors Contient() sera douloureusement lent. Je suggère d'utiliser le Data Filter() intégré dans le cadre de l'invite. Ce sera beaucoup plus rapide pour les grandes tables.
Essayez l'exemple ci-dessous dans JMP 10 (il ne semble pas fonctionner tel quel dans JMP 9). La sélection et le sous-ensemble sont quasi instantanés pour une table de 1 million de lignes (MacPro 8x2,8 GHz).
// Exemple de tableau
dt = Nouveau tableau ( "Grand" ,
ajouter des lignes ( 1000000 ) ,
Nouvelle colonne ( "trimestre" , nominal , formule ( 1 + dix * Rond ( Uniforme aléatoire () / 3 , 1 ) ) )
) ;
dt << exécuter des formules () ;
Colonne ( "trimestre" ) << supprimer la formule ;
//Rapide
df = dt << filtre de données ( Colonnes ( : trimestre ) ) ;
rdf = df << rapport ;
rdf [ Boîte de contour ( 1 )] << définir le titre ( "Sélectionnez un ou plusieurs trimestres" ) << ajouter (
Boîte à boutons ( "Créer un sous-ensemble" ,
dt << Sous-ensemble ( Nom de la table de sortie ( "Âges choisis" ) ) ;
df << fermer , nouveau << fermer
)
) ;
//personnalisation facultative : rdf[listbox(4)]<Re : Erreur lors de la création d'invites
Merci à vous deux pour vos très bons conseils, j'apprécie ! Le code fonctionne maintenant correctement, mais il est un peu lent lorsqu'il utilise 1,5 million de lignes.
Re : Erreur lors de la création d'invitesOui, la fonction Contient() est plus élégante ici. Mais j'obtiens une erreur si je sélectionne un seul élément dans l'exemple ci-dessus. Probablement parce que num_liste [ sélectionner1 << obtenir des indices sélectionnés ] renvoie alors un nombre au lieu d'une liste de nombres.
Ici
dt << Sélectionnez où ( contient ( sélectionner1 << être sélectionné , carboniser( : âge) ) ) ;
fonctionne mieux et devrait fonctionner indépendamment du fait que :age soit un caractère ou un chiffre.
Re : Erreur lors de la création d'invitesIl existe une construction pratique pour rechercher une colonne à l'aide d'une liste avec le contient fonction.Le code ci-dessous montre comment l'utiliser :
dt = ouvrir ( "$exemple_données\grande classe.jmp" ) ;
Résumer ( age_list = Par ( Colonne ( dt , "âge" ) ) ) ;
num_liste = {} ;
pour ( je = 1 , je <= articles ( age_list ) , je ++,
num_liste [ je ] = nombre ( age_list [ je ]) ;
) ;
nouveau = Nouvelle fenetre ( "Choisir les âges" ,
hb = Panneau électrique ( "Choisir les âges" ,
sélectionner1 = Zone de liste (
age_list ,
dt << Sélectionnez où ( contient ( num_liste [ sélectionner1 << obtenir des indices sélectionnés ] , : âge ) ) ;
selRows = dt << Obtenir les lignes sélectionnées ;
)
) ,
Boîte à boutons ( "D'ACCORD" ,
dt << Sélectionnez où ( contient ( num_liste [ sélectionner1 << obtenir des indices sélectionnés ] , : âge ) ) ;
/* Les lignes sélectionnées sont sous-ensembles dans une nouvelle table. */
dt << Sous-ensemble ( Nom de la table de sortie ( "Âges choisis" ) ) ;
nouveau << Fermer la fenêtre ;
)
) ;
Re : Erreur lors de la création d'invitesLa comparaison
: année == quarter_list [ sélectionner1 << obtenir ]
ne fonctionne pas pour plus d'une valeur car il teste l'égalité d'une valeur de cellule et d'une liste. Il retournera toujours false (je ne pense pas que les cellules puissent contenir des listes).
Il y a plusieurs moyens de le faire. Voici une suggestion (pour le script du bouton OK) où la sélection de lignes est basée sur une matrice de numéros de lignes obtenue en parcourant la liste des éléments sélectionnés.
Boîte à boutons ( "D'ACCORD" ,
Lignes = [] ;
L = quarter_list [ sélectionner1 << Obtenir les indices sélectionnés ] ;
Pour ( je = 1 , je <= N articles ( L ) , je ++,
Lignes = Lignes || ( dt << obtenir des lignes où ( : année == L [ je ] ))
) ;
/* Les lignes sélectionnées sont sous-ensembles dans une nouvelle table. */
dt << Sous-ensemble ( Lignes(lignes), nom de la table de sortie ( "Quartiers choisis" ) ) ;
nouveau << Fermer la fenêtre ;
)
Re : Erreur lors de la création d'invitesMerci, cela fonctionne maintenant bien lorsque je sélectionne une seule valeur de la variable, que dois-je faire lorsque je veux sélectionner par exemple trois valeurs de la variable aux nouvelles données en appuyant sur Shitf ?
Re : Erreur lors de la création d'invitesCe qui est entre crochets lorsqu'il est utilisé comme index de liste doit être un nombre (ou une liste de nombres). Essayez plutôt
quarter_list [ sélectionner1 << Obtenir les indices sélectionnés ]
Re : Erreur lors de la création d'invitesMerci pour vos conseils.
Il se plaint toujours de ces [select1 << get] points.
Cette variable yearm est une variable de caractère et cela n'a pas aidé même si j'ai fait yearm comme variable numérique.
"indice invalide (doit être un nombre ou une liste de nombres){1} dans l'accès ou l'évaluation de 'Indice' , quarter_list[select1 << get]"
Re : Erreur lors de la création d'invitesJe n'utiliserais pas quarter comme variable, car il s'agit également d'une fonction JMP.Peut-être quarter_list ?Essayez également de placer l'instruction de fermeture de fenêtre en dernier.Code de non-test :
Résumer ( quarter_list = Par ( Colonne ( dt , "année" ) ) ) ;
nouveau = Nouvelle fenetre ( "Choisir des quartiers" ,
hb = Panneau électrique ( "Choisissez l'année" ,
sélectionner1 = Zone de liste (
quarter_list ,
dt << Sélectionnez où ( : année == quarter_list [ sélectionner1 << obtenir ] ) ;
selRows = dt << Obtenir les lignes sélectionnées ;
)
) ,
Boîte à boutons ( "D'ACCORD" ,
dt << Sélectionnez où ( : année == quarter_list [ sélectionner1 << obtenir ] ) ;
/* Les lignes sélectionnées sont sous-ensembles dans une nouvelle table. */
dt << Sous-ensemble ( Nom de la table de sortie ( "Quartiers choisis" ) ) ;
nouveau << Fermer la fenêtre ;
)
) ;