Sélection conditionnelle où<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai le code JSL ci-dessous pour sélectionner et sous-ensembler les données où il y a moins de 25 lignes par « balise », enregistrer le sous-ensemble et supprimer le sous-ensemble de l'ensemble de données de travail principal. Cela fonctionne bien là où il y a des balises de moins de 25 lignes, mais j'ai besoin qu'elles soient robustes et fonctionnent là où il n'y a pas de balises de moins de 25 lignes - auquel cas il doit ignorer les lignes 4 à 6 et continuer jusqu'à la ligne 7 pour enregistrer l'ensemble de données de travail principal avec un nouveau nom. Comment puis-je atteindre cet objectif?
Merci beaucoup
1 Ouvrir( "data.jmp" );
2 dt=table de données actuelle() << Résumé( Group( :tag ) );
3 Table de données ( "données par (tag)" ) << Sélectionner où ( :N lignes < 25) << Trier ( par ( :N lignes ), ordre (croissant), nom de la table de sortie ("summary_of_small_n"));
4 Table de données( "data" ) << Sous-ensemble(( Lignes sélectionnées ), Nom de la table de sortie("sub_small_n"));
5 Table de données( "sub_small_n" ) << save("sub_small_n.jmp");
6 Tableau de données( "summary_of_small_n" ) << save("summary_of_small_n.jmp");
7 Table de données( "data" ) << supprimer les lignes << save("data_less_small_n.jmp");
Re : Sélection conditionnelle oùAprès un peu plus de bidouillage, ce qui suit semble fonctionner pour moi. Merci pour l'aide.
Ouvrir( "data.jmp" );
dt = table de données actuelle() << Résumé( Group( :tag ) );
Table de données ( "données par (tag)" ) << Sélectionner où ( :N lignes < 25) << Trier ( par ( :N lignes ), ordre (croissant), nom de la table de sortie ("summary_of_small_n_tag"));
Table de données( "summary_of_small_n_tag" ) << save("summary_of_small_n_tag.jmp");
num_selected = nrows(dt << obtenir les lignes sélectionnées);
si (num_selected (dt > 0),
// Si la condition est satisfaite, faites ceci...
Table de données( "data" ) << Sous-ensemble(( Lignes sélectionnées ), Nom de la table de sortie("sub_small_n"));
Table de données( "sub_small_n" ) << save("sub_small_n.jmp");
Table de données( "data" ) << supprimer les lignes << save("data_less_small_n.jmp");
,
// Sinon, fais ça...
Table de données( "données" ) << sauvegarder(" data_less_small_n.jmp ");
);
Re : Sélection conditionnelle où@rijking
Juste sur la base du point (a) - est-ce que peut-être essayer une sélection inversée fonctionnerait ? L'as tu essayé ?Si cela ne fonctionne pas, pouvez-vous s'il vous plaît suggérer un exemple de tableau de données de la bibliothèque d'exemples de données qui correspond à votre problème afin que je puisse essayer de reproduire le problème pour essayer de vous aider ?
Meilleur
Oujour
Re : Sélection conditionnelle oùIan, merci. Cela ne fonctionne pas vraiment comme :
a) Je dois me référer au numéro de choisi lignes (plutôt que le nombre total de lignes sur lesquelles je comprends que NRow fonctionne) - car dt2 résume le nombre total de lignes pour toutes les balises, pas seulement celles <25.
b) Si je fais référence aux lignes sélectionnées dans dt2, je pense que cela doit être > 0 plutôt que > 24 - car dt2 résume le nombre total de lignes pour toutes les balises, donc je m'intéresse à toutes les lignes sélectionnées (même s'il n'y en a qu'une seule). ; celui-ci résumerait une balise apparaissant sur moins de 25 lignes dans le dt sous-jacent).
Toute autre suggestion serait très appréciée. Merci.
Ian@JMP wrote:You need to use the 'NRow()' function in combination with an 'If()' expression. Something like:Open( "data.jmp" );dt = current data table() << Summary( Group( :tag ) );dt2 = Data Table( "data By (tag)" ) << Select Where( :N Rows < 25) << Sort( By( :N Rows ), Order( Ascending ), Output Table Name("summary_of_small_n"));if( NRow(dt2 > 24, // If the condition is satisfied, do this . . . Data Table( "data" ) << Subset(( Selected Rows ), Output Table Name("sub_small_n")); Data Table( "sub_small_n" ) << save("sub_small_n.jmp"); Data Table( "summary_of_small_n" ) << save("summary_of_small_n.jmp") , // Else do this . . . Data Table( "data" ) << delete rows << save("data_less_small_n.jmp"); );
Re : Sélection conditionnelle oùVous devez utiliser la fonction 'NRow()' en combinaison avec une expression 'If()'. Quelque chose comme:
Ouvrir ( "données.jmp" ) ;
dt = tableau de données actuel () << Résumé ( Groupe ( : étiqueter ) ) ;
dt2 = Tableau de données ( "données par (balise)" ) << Sélectionnez où ( : N lignes < 25 ) << Trier ( Par ( : N lignes ) , Commande ( Ascendant ) , Nom de la table de sortie ( "résumé_de_small_n" )) ;
si (
NRangée ( dt2 > 24 ,
// Si la condition est satisfaite, faites ceci . . .
Tableau de données ( "données" ) << Sous-ensemble (( Lignes sélectionnées ) , Nom de la table de sortie ( "sub_small_n" )) ;
Tableau de données ( "sub_small_n" ) << sauvegarder ( "sub_small_n.jmp" ) ;
Tableau de données ( "résumé_de_small_n" ) << sauvegarder ( "résumé_de_small_n.jmp" )
,
// Sinon, fais ça. . .
Tableau de données ( "données" ) << supprimer des lignes << sauvegarder ( "data_less_small_n.jmp" ) ;
) ;