En savoir plus sur la création de sous-ensemblesBonjour, je fais référence au post https://communities.sas.com/message/166376#166376 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 sous-définissant :
dt = Ouvert ( GrandeClasse);
dt << filtre de données (ajouter un filtre(columns(:age),where(:age=={12,13}), Mode (select(1)));
sous1 = dt<
En conséquence, un tableau de données nommé « régions » est créé. 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 le déroulement de mon 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 de charger le fichier à partir d'un fichier Excel pour pouvoir vous envoyer le code original, qui contenait certains noms). Pour expliquer : il existe une colonne de caractères dans laquelle je souhaite 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 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 que j'exécute PUIS le filtre de données, alors le filtre est créé et les lignes sont sélectionnées. Et enfin, la table de données du sous-ensemble est créée. Mais ces choses devraient se produire de toute façon, quelle que soit la manière dont le script est exécuté ? OU?
Ceci est fondamental pour l’utilisation des scripts, je dois donc acquérir 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" , Caractère ,
Définir les valeurs ( { "tambour" , "trompette" , "lyre" , "clarinette" , "didgeridoo" } )
)
);
sel = dt << obtenir les lignes où ( Commence par ( : instr , "d" ) | Commence par ( : instr , "l" ) ) ;
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-ensemblesFermer le filtre de données est simple si vous lui avez donné une référence.
df = dt << filtre de données ( ... ) ;
df << fermer ;
Re : En savoir plus sur la création de sous-ensemblesSalut MS,
ajouter wait(); après l'évaluation de la formule, le problème du filtre non défini avant l'exécution de la commande de sous-ensemble est résolu. 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 l'ensemble 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 tout simplement pas comment 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 colonnes créées dans le même script, j'ai constaté que l'évaluation des formules pouvait prendre du retard par rapport à l'exécution du script, ce qui pouvait conduire à des résultats inattendus. Pour éviter cela, on peut essayer d'insérer une formule Wait() ou << eval aux étapes critiques.
Cependant dans ce cas particulier, si je comprends bien, il n'y a pas besoin de nouvelle colonne (ni de 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" , Caractère ,
Définir les valeurs ( { "tambour" , "trompette" , "lyre" , "clarinette" , "didgeridoo" } )
)
);
// Sélectionnez une instr commençant par d ou l à l'aide d'un filtre de données
sel = dt << obtenir les lignes où ( Commence par ( : instr , "d" ) | Commence par ( : instr , "l" ) ) ;
dt << filtre de données (
ajouter un filtre ( colonnes ( : instr ) , où ( : instr = : instr [ sel ] ) , mode ( select ( 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 par ( : instr , "d" ) | Commence par ( : instr , "l" ) ) ;
dt << sous-ensemble ( nom de la table de sortie ( "sel instr" ) , lignes sélectionnées ( 1 ) , colonnes sélectionnées ( 0 ) ) ;