<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
J'utilise JMP10.J'essaie de créer un script pour supprimer les lignes de données en double dans une table de données.Un exemple de ma tentative est le suivant :
// Commencer.
// Crée une table de données.
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt << Sélectionner au hasard (5);
subdt = dt << Sous-ensemble (Nom de la table de sortie ("sous-ensemble"), Invisible);
dt << Concaténer (subdt, ajouter à la première table) ;
Fermer (subdt, pas de sauvegarde);
dt << Effacer la sélection ;
// Recherchez et supprimez les lignes en double pour bigClass.
icol = dt << Nouvelle colonne ( "Index", Numérique, Continue, Formule ( Séquence ( 1, N Row ( dt ), 1, 1 ) ) );
repcol = dt << Nouvelle colonne( "Répéter les données",
Numérique,
Continu,
Formule( If( :Index == Col Minimum( :Index, :name, :age, :sex, :height, :weight ), 1, 0 ) )
);
dt << Sélectionner Où ( Comme Colonne (repcol) == 0 );
dt << Supprimer les lignes ();
dt << Supprimer les colonnes ( {icol, repcol} );
// Recherchez et supprimez les lignes en double pour la table de données générique.
colnames = dt << Obtenir les noms de colonnes ();
icol = dt << Nouvelle colonne ( "Index", Numérique, Continue, Formule ( Séquence ( 1, N Row ( dt ), 1, 1 ) ) );
repcol = dt << Nouvelle colonne( "Répéter les données",
Numérique,
Continu,
Formule( If( :Index == Col Minimum( :Index, /* Insérez les noms de colonnes ici. */ ), dix ) )
);
dt << Sélectionner Où ( Comme Colonne (repcol) == 0 );
dt << Supprimer les lignes ();
dt << Supprimer les colonnes ( {icol, repcol} );
// Fin.
Mon problème est que j'aimerais exécuter ce script sur une table de données générique.Comment puis-je insérer ma liste de noms de colonnes dans ma formule ?Existe-t-il une manière plus intelligente de procéder ?
Merci!
Il est astucieux d'utiliser Col Min() avec une colonne d'index pour localiser les doublons.
J'utilise habituellement Tables->Résumé pour obtenir un tableau de données exempt de doublons. Regroupez simplement toutes les colonnes qui définiraient un doublon. Cela présente l'avantage supplémentaire de fournir une colonne (N lignes) qui vous indique le nombre de lignes en double dans la table d'origine.

-Jeff
J'ai été trop rapide. La première version publiée échouerait pour les noms de colonnes complexes nécessitant la construction :Name("eg ∆X"). J'ai édité le code ci-dessus et maintenant il devrait fonctionner de manière plus générale.
Merci MS!Très intelligent.Il me faudra encore étudier exactement comment cela fonctionne.
Excellente idée d'utiliser Col Min() pour trouver les doublons !
Vous trouverez ci-dessous une approche alternative basée sur votre idée qui semble fonctionner. C'est plus simple car il n'y a pas besoin de colonnes de formules temporaires.
// Crée un exemple de table de données.
Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) << Enchaîner ( Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) , Ajouter au premier tableau ) ;
// Supprime les doublons de la table générique
dt = Tableau de données actuel () ;
col_min = Analyser ( "Col Min(Ligne(), :Nom(\!"" || Concaténer des éléments ( dt << obtenir les noms de colonnes ( chaîne ) , "\!"), :Nom(\!"" ) || "\!"))" ) ;
doublons = [] ;
Pour chaque ligne ( Si ( col_min != Rangée () , doublons |/= Rangée () ) ) ;
dt << supprimer des lignes ( doublons ) ;