Création d'un sous-ensemble de colonnes basé sur une liste pouvant contenir des colonnes inexistantesSalut les utilisateurs,
J'ai lu une discussion antérieure sur ce sujet mais je n'ai pas trouvé toutes les réponses.
J'aimerais savoir comment créer un sous-ensemble de colonnes basé sur une liste de colonnes donnée. Je sais que vous pouvez facilement le faire lorsque les colonnes de la liste donnée existent dans la table de données que vous souhaitez sous-ensembler.
Ce que je veux savoir, c'est comment rendre le script robuste afin qu'il ne donne pas l'erreur "Colonne introuvable lors de l'accès ou de l'évaluation de 'Mauvais argument' dans le cas où une colonne donnée dans la liste n'existe pas.
Par exemple, dans mon script ci-dessous, je veux toujours pouvoir créer un sous-ensemble de "Big Class.jmp" avec des colonnes, un nom, un âge et une taille car ils existent mais mon script tombe en panne tel quel parce que j'ai un non- colonne existante dans la liste donnée appelée, aucune.
J'ai essayé de mettre Try() autour du code mais sans succès.
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
big_class_cols = dt << Get Column Names();
show(big_class_cols);
subDt1 = dt << Subset(
Columns( cols_of_interest ),
Output Table Name( "Big Class 2" )
);
"
Merci,
Simon
Accès aux donnéesMélange et nettoyage des donnéesRe : Création d'un sous-ensemble de colonnes basé sur une liste pouvant contenir des colonnes inexistantesSolution très élégante. Cela fonctionne très bien.
Merci Jim!Re : Création d'un sous-ensemble de colonnes basé sur une liste pouvant contenir des colonnes inexistantesVoici une façon d'utiliser <
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cols_of_interest = {name, age, height, none}; //names without scoping colon
AA1 = Associative Array( dt << Get Column Names() );
AA2 = Associative Array( cols_of_interest );
cols = AA2 << intersect( AA1 ) << get keys;
subDt1 = dt << Subset( Columns( cols ), Output Table Name( "Big Class 2" ) );
Re : Création d'un sous-ensemble de colonnes basé sur une liste pouvant contenir des colonnes inexistantesVoici un moyen simple de gérer cela.Il vérifie simplement si chaque colonne de la liste cols_of_interest existe dans la table de données, et sinon, il la supprime de la liste cols_of_interest.
names default to here(1);
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For(i=nitems(cols_of_interest), i>=1, i--,
if(try(column(dt,char(cols_of_interest[i]))<<GET name=""></GET>