En savoir plus sur la création de sous-ensembles<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour, je fais référence au post https://communities.sas.com/message/166376#166376 à partir de mai de cette année.
L'exemple explique comment créer une nouvelle table de données en 1) ajoutant d'abord un filtre de données af, et 2) puis en créant des sous-ensembles :
dt = Ouvrir ( BigClass);
dt << filtre de données (ajouter filtre(columns(:age),where(:age=={12,13}), Mode (select(1)));
sub1 = dt<
En conséquence, une table de données nommée "régions" est créée. Comme prévu.
J'ai créé un exemple similaire en utilisant mon propre ensemble de données (l'exemple BigClass fonctionne !!), ce qui ne fonctionne pas bien pour moi. Je soupçonne que j'ai mal compris quelque chose. Voici mon flux de programme ci-joint.
La différence entre l'exemple BigClass et mon exemple est que le filtre de données n'est pas sélectionné lorsque j'exécute l'intégralité du script. (J'ai omis le chargement du fichier à partir d'un fichier Excel pour pouvoir vous envoyer le code d'origine, qui contenait certains noms). Pour expliquer : il y a une colonne de caractères, à partir de laquelle je veux sélectionner uniquement les lignes où le texte de la colonne commence par "d" ou "I". J'ai trouvé nécessaire de créer une nouvelle colonne sur laquelle effectuer le filtre de données. Lorsque j'exécute le code au total, les lignes ne sont PAS sélectionnées et la table de données du sous-ensemble n'est pas créée. Si j'exécute d'abord le code JUSQU'À la création de la nouvelle colonne, Onelettet, puis exécute le filtre de données, le filtre est créé et les lignes sont sélectionnées. Et enfin, la table de données de sous-ensemble est créée. Mais ces choses devraient se produire de toute façon, comment le script est exécuté ? OU ALORS?
C'est fondamental pour l'utilisation des scripts, j'ai donc besoin d'avoir une compréhension approfondie de ces subtilités.
Salutations
Poul
Re : En savoir plus sur la création de sous-ensemblesEn utilisant l'exemple de code de MS, voici une solution directe très robuste, car elle ne nécessite pas que les lignes de la table de données passent à l'état sélectionné :
dt = Nouveau tableau ( "test" ,
Ajouter des lignes ( 5 ) ,
Nouvelle colonne ( "Instr" , Personnage ,
Définir les valeurs ( { "tambouriner" , "trompette" , "lyre" , "clarinette" , "didgeridoo" } )
)
) ;
sel = dt << obtenir des lignes où ( Commence avec ( : instruction , "ré" ) | Commence avec ( : instruction , "je" ) ) ;
dt << sous-ensemble ( nom de la table de sortie ( "sel instr" ) , Lignes ( sel ) , colonnes sélectionnées ( 0 ) ) ;
Re : En savoir plus sur la création de sous-ensemblesLa fermeture du filtre de données est simple si vous lui avez donné une référence.
df = dt << filtre de données ( ... ) ;
df << proche ;
Re : En savoir plus sur la création de sous-ensemblesSalut MS,
ajout de wait(); après l'évaluation de la formule résout le problème du filtre non défini avant l'exécution de la commande de sous-ensemble. Merci.
Quelle est la commande pour fermer la fenêtre du filtre ? Je ne veux pas qu'il reste à l'écran après le sous-ensemble. Je veux juste le jeu de données. En fait, je n'ai pas du tout besoin de le voir.
Et oui, je pensais que la sélection pouvait se faire en une seule déclaration. Je ne savais pas comment le faire.
Merci
Poul
Re : En savoir plus sur la création de sous-ensemblesIl est difficile de dire pourquoi cela ne fonctionne pas dans un cas particulier sans table pour tester le code. Si le code dépend de formules de colonne créées dans le même script, j'ai constaté que l'évaluation de la formule peut être en retard sur l'exécution du script, ce qui peut entraîner des résultats inattendus. Pour éviter cela, on peut essayer d'insérer Attendez() ou alors << formule d'évaluation aux étapes critiques.
Cependant, dans ce cas particulier, si je comprends bien, il n'y a pas besoin d'une nouvelle colonne (ou d'un filtre de données). Peut-être que l'exemple ci-dessous peut être utile.
//exemple de tableau
dt = Nouveau tableau ( "test" ,
Ajouter des lignes ( 5 ) ,
Nouvelle colonne ( "Instr" , Personnage ,
Définir les valeurs ( { "tambouriner" , "trompette" , "lyre" , "clarinette" , "didgeridoo" } )
)
) ;
// Sélectionne instr commençant par d ou l en utilisant un filtre de données
sel = dt << obtenir des lignes où ( Commence avec ( : instruction , "ré" ) | Commence avec ( : instruction , "je" ) ) ;
dt << filtre de données (
ajouter un filtre ( Colonnes ( : instruction ) , où ( : instruction = : instruction [ sel ] ) , mode ( sélectionner ( 1 ) ) )
) ;
dt << sous-ensemble ( nom de la table de sortie ( "sel instr" ) , Lignes sélectionnées ( 1 ) , colonnes sélectionnées ( 0 ) ) ;
// Ou une approche plus directe sans filtre de données
dt << sélectionner où ( Commence avec ( : instruction , "ré" ) | Commence avec ( : instruction , "je" ) ) ;
dt << sous-ensemble ( nom de la table de sortie ( "sel instr" ) , Lignes sélectionnées ( 1 ) , colonnes sélectionnées ( 0 ) ) ;