Conserver les colonnes correspondant à une liste, supprimer le resteSalut -
Je souhaite supprimer des colonnes (en fonction des noms de colonnes) d'une table de données qui pas correspondre à une liste. J'ai suivi le code JSL jusqu'à présent mais cela ne fonctionne pas.
Contribution appréciée.
Names Default To Here( 1 );
bigClass = Open( "$SAMPLE_DATA/Big Class.JMP" );
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
For(j = 1, j <= N Items( col_of_interest ), j++,
For( i = N Items( col_names ), i > 0, i--,
if ( not( col_names[i] == col_of_interest[j],
Remove From( col_names, i ))
);
);
);
dtNew = dt << subset( all rows, columns( col_names ) ); Wait( 0 );
Ingénierie Qualité et Procédésles fenêtresRe : Conserver les colonnes correspondant à une liste, supprimer le resteEn fait, JMP ne confondra pas la variable j et la fonction J() car lorsque vous utilisez le nom d'une fonction, il doit être suivi des parenthèses, sinon il sera défini comme autre chose, comme une variable si ce nom existe.
Mais je prends votre avertissement au sérieux en général car les noms sont importants en JSL !
Re : Conserver les colonnes correspondant à une liste, supprimer le resteUne autre option si vous utilisez JMP 16 :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
//list of columns to include
col_of_interest = {"name", "age", "weight", "does not exist"};
// Option 1 - subset table
// Filter out columns in the list that aren't in the table and subset
cols_checked = filter each({cn}, dt << Get Column Names( String ), n items(loc( col_of_interest, cn ))>0);
dtNew = dt << subset( all rows, columns( cols_checked ) );
// Option 2 - delete columns from original table
for each({c}, dt << get column references, if( n items( loc( col_of_interest, c << get name ) ) == 0, dt << delete columns(c) ) );Re : Conserver les colonnes correspondant à une liste, supprimer le resteMerci pour la contribution et le conseil sur la fonction matricielle J, jthi. Laissez-moi réessayer.
Re : Conserver les colonnes correspondant à une liste, supprimer le resteLorsque je compare deux listes, je trouve plus facile de créer une troisième liste pour contenir les résultats tout en parcourant les boucles, puis d'utiliser la troisième liste pour agir lorsque toute la boucle est terminée.Le code ci-dessous peut accomplir ce que vous essayez.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
col_list = {};
For( i = N Items( col_names ), i > 0, i--,
if(contains(col_of_interest, col_names[i]),
insert into(col_list, col_names[i])
);
);
dtNew = dt << subset( all rows, columns( col_list ) );
Wait( 0 );
Re : Conserver les colonnes correspondant à une liste, supprimer le resteJe ferais une boucle sur toutes les colonnes de la table de données et les supprimerais si nécessaire (si vous souhaitez conserver votre idée, je peux également vous aider à le déboguer) :
Names Default To Here(1);
bigClass = Open("$SAMPLE_DATA/Big Class.JMP");
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names(String);
For(i = 1, i <= N Items(col_names), i++,
If(!Contains(col_of_interest, col_names[i]),
dt << Delete Columns(col_names[i]);
);
);
Wait(0);Je suggérerais également de ne pas utiliser J comme nom de variable, car JMP a une fonction matricielle J().
Modifier:
De plus, il n'est pas nécessaire d'utiliser Current Data Table() (et vous ne devriez pas le faire) car vous avez déjà la référence après avoir ouvert la table. Voici également ma méthode préférée pour supprimer des colonnes (en utilisant un tableau associatif pour obtenir uniquement les colonnes supplémentaires et les supprimer) :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.JMP");
col_of_interest = {"name", "age", "weight"};
//get columns which are "extra"
col_names_aa = Associative Array(dt << Get Column Names(String));
col_names_aa << Remove(Associative Array(col_of_interest));
col_names_to_remove = col_names_aa << get keys;
Show(col_names_to_remove);
dt << Delete Columns(col_names_to_remove);