Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/01/2008, 14h10   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 5
Points : 1
Points : 1
Par défaut scanner un repertoire

Bonjour,

Voilà mon pb, je dois scanner les différentes tables d'un répertoire.
S'il existe des sous-répertoires à l'intérieur de ce dernier, je dois également les scanner. Au final, je dois avoir une table de sortie dans lequel j'ai le nom de mes tables table sas,avec différentes caractéristiques comme son option de tri, le nb d'enregistrement et si elle est compresser ou non. Je pense que je dois utiliser entre autres une proc contents, non ?
Suis-je clair ou complètement incompréhensible ?
Pour info, je suis un peu débutant en SAS...

Merci pour votre aide.
pgirier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 14h59   #2
Membre chevronné
 
Avatar de steelspirit
 
Inscription : janvier 2008
Messages : 420
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 420
Points : 739
Points : 739
Envoyer un message via MSN à steelspirit
wouaaa rien que ça effectivement tu peux passer par un proc contents mais il faut d'abord déclarer des libnames qui pointent sur tes fichiers SAS !

voici les étapes à suivre :
1) stockage des chemins des répertoires dans des macro-variables
2) parcours des macro-variables et création des libname
3) parcours des libnames et récupération du nom des tables, ses options de tri, le nb d'enregistrement, la compression...

étape 1:
La commande DOS permettant de lister les fichiers d'un répertoire et des sous répertoire est : Dir /S/W
Il faut ensuite importer le résultat de cette commande dans une table SAS. ça marche pareil que pour importer un fichier classique mais avec un filename un peu différent :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
%let chemin=C:\;  /* Chemin à partir duquel lire les fichiers : A ADAPTER */
 
OPTION noxwait xsync; /*noxwait : ne pas afficher la fenetre DOS, xsync : attendre la fin de la commande pour poursuivre le traitement */
 
filename liste pipe "DIR /W/S &chemin"; /*commande DOS a exécuter */
/* Création de la table contenant la liste des fichiers SAS */
DATA liste;
	format liste $500.;
	INFILE liste;
	input liste $;
run;
/* liste_rep : on ne garde que les chemins de répertoires et on les stockes dans des macro-variables */
DATA liste_rep;
     SET liste;
     IF INDEX(liste,'R‚pertoire de ')>0 then do;
            liste=TRANWRD(liste,'R‚pertoire de ','');
            output;
    end;
run;
étape 2 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
%macro liste;
DATA _NULL_;
       SET liste_rep;
       call symput(compress('rep'||_N_),trim(LEFT(liste))); /*création des macro-variable rep1, rep2 etc...*/
       call symput('nb_rep',trim(LEFT(_N_))); /*nombre de répertoires au total*/
run;
 
%do i=1 %TO &nb_rep;
 
    libname lib&i "&&rep&i";
    /* proc contents :*/
    proc contents DATA=lib&i.._ALL_ out=contenu&i; /* _ALL_ pour faire un contents sur toute les tables du libname */
    run;
 
%end;
 
%mend;
%liste;
voila c'est pas plus compliqué que ça

Bon courage,

Steel
steelspirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 17h49   #3
Invité de passage
 
Inscription : janvier 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 5
Points : 1
Points : 1
Steel, t'es trop fort !!
J'ai quand même mis un moment à adapter le code mais ca marche niquel.

Merci bien
pgirier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 18h02   #4
Membre chevronné
 
Avatar de steelspirit
 
Inscription : janvier 2008
Messages : 420
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2008
Messages : 420
Points : 739
Points : 739
Envoyer un message via MSN à steelspirit
Et encore j'ai fait ça à l'arrache sans tester et sans optimiser

Content d'avoir pu t'aider

A+

Steel
steelspirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h43.


 
 
 
 
Partenaires

Hébergement Web