Bonjour,
je souhaite récupérer la liste des modalités d'une variable de ma table SAS. Comment faire pour que ce traitement soit court sachant que la table sur laquelle je travaille est énorme?
Merci de votre aide.
Olive.
Bonjour,
je souhaite récupérer la liste des modalités d'une variable de ma table SAS. Comment faire pour que ce traitement soit court sachant que la table sur laquelle je travaille est énorme?
Merci de votre aide.
Olive.
Bonjour,
Tu peux être plus explicite ?
Bien entendu!
Ma table est énorme (20 Go) et contient le fruit de l'observation de la variable TOTO sur l'ensemble d'une population. Le fournisseur de cette table ne m'a pas donné la liste des modalités de la variable TOTO, à moi d'en faire une liste.
Ce que j'aimerais, c'est récupérer une table du style:
modalité1
modalité2
modalité3....
Je n'ai pas besoin de comptage, juste des noms des modalités.
Quelle est la méthode la moins gourmande en temps?
Merci!
Bonjour,
Une méthode me vient à l'esprit mais je ne pense pas que ce soit la moins gourmande:
Voilà un exemple devant fonctionner mais le tri pourrait prendre du temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Proc sort data=entree; by toto; run; data final; set entree; by toto; if first.toto; run;
Cordialement,
Frajen
Moi je dirais qu'une proc freq est adaptée pour ça,
Un exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 proc freq data=sashelp.Air; tables DATE/out=sortie; run;
Si tu as vraiment beaucoup de modalités (par exemple il m'arrive de devoir faire des listes de modalités sur de grosses tables et pour laquelle j'ai énormément de modalités, c'est à dire plusieurs millions voir dizaines de millions de modalités)
alors je te recommande la proc summary
Chez moi la freq bloque passé un certain nombre de modalités, sinon la freq fait généralement bien son travail à condition de ne pas omettre l'option noprint de la freq si tu as vraiment beaucoup de modalités.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 data cpte_mod; set sashepl.air;keep date w;w=1;run; PROC SUMMARY DATA=cpte_mod; CLASS DATE; VAR w; TYPES CLASS; OUTPUT OUT=sortie sum=; run;
Tu peux faire encore plus court
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 proc sort data=entree out=entree_(keep=toto) nodupkey; by toto; run;
Merci à tous!
j'étais effectivement partie sur une PROC FREQ, mais je pensais que peut-être il pouvait y avoir une meilleure méthode. Je vais comparer avec la PROC SUMMARY pour voir ce qui est le mieux. Par contre, je ne pense pas me lancer dans la PROC SORT...
Olive.
Tu peux utiliser la proc SQL; tu nous diras la plus performante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 proc sql; create table res as select distinct toto as mod from ma_table (keep=toto); quit;
Je pense que c'est encore la solution la plus courte et peut-être la plus performante, surtout si tu n'as pas besoin de compter le nombre d'occurence de chaque modalité.
Moi c'est souvent le cas c'est pourquoi j'utilise la freq , la summary ou une étape data après un sort si la summary "calle" (ça m'est arrivé).
Sinon tu as encore la piste de la SQL
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager