Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
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 20/04/2011, 11h05   #1
Invité régulier
 
Homme Damien Guiavarch
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Damien Guiavarch
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 8
Points : 8
Par défaut Lire les noms de tables SAS

Bonjour,

Est ce qu'il est possible de récupérer les noms des tables sas dans un dossier (comme la Work) et d'ensuite les ajouter dans une autre table, afin d'utiliser les noms des tables dans une étape data?

Merci.
damien29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h11   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonjour Damien.
Tu peux faire ça :
Code :
1
2
3
ODS OUTPUT members = work.liste_tables ;
PROC CONTENTS DATA=work._ALL_ ;
RUN ;
Ou sinon piocher directement dans une vue système comme SASHELP.VSTABLE.
Code :
1
2
3
DATA work.liste_tables ;
  SET sashelp.vstable (WHERE=(libname="WORK")) ;
RUN ;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 11h30   #3
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
sinon il y a :

Code :
1
2
3
proc Sql;
	CREATE TABLE TABLES AS SELECT memname FROM dictionary.TABLES WHERE upcase(libname)='SASHELP' AND upcase(memtype)='DATA';
quit;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 12h49   #4
Invité régulier
 
Homme Damien Guiavarch
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Damien Guiavarch
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 8
Points : 8
Merci beaucoup
damien29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 12h57   #5
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par olivier.decourt Voir le message
Ou sinon piocher directement dans une vue système comme SASHELP.VSTABLE.
Code :
1
2
3
DATA work.liste_tables ;
  SET sashelp.vstable (WHERE=(libname="WORK")) ;
RUN ;
Olivier
Pour éviter les surprises, il faut rajouter un upcase ou lowcase pour le nom du libname, car pour SAS il n'existe pas de WORK mais plutot Work :
Code :
1
2
3
DATA work.liste_tables ;
  SET sashelp.vstable (WHERE=(UPCASE(libname)="WORK")) ;
RUN ;
l'avantage de la PROC SQL;c'est qu'on peut récupérer le résultat dans une macro variable, toute fois il faut faire attention à la longueur de la macro variable:

Code :
1
2
3
4
5
 
proc Sql noprint;
   SELECT memname INTO :noms separated BY ',' FROM dictionary.TABLES WHERE upcase(libname)='SASHELP' AND upcase(memtype)='DATA';
quit;
%put &nom.;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 13h12   #6
Invité régulier
 
Homme Damien Guiavarch
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Damien Guiavarch
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 8
Points : 8
Et pour récupérer de la même façon les variables d'une table, qu'est ce qu'il faut modifier?
damien29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 13h18   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Citation:
Envoyé par damien29 Voir le message
Et pour récupérer de la même façon les variables d'une table, qu'est ce qu'il faut modifier?
avec ce code tu peux récupérer tout ce que tu veux :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
 
OPTION nolabel;
 
proc Sql;
	CREATE TABLE  a AS  SELECT DISTINCT (memname) FROM dictionary.dictionaries;
quit;
 
DATA _null_;
	SET a;
	call symput ('n', (_n_));
	call symput ('var'!!LEFT (_n_),memname);
run;
 
%macro tout;
	%do i=1 %TO &n.;
 
		proc Sql;
			reset noprint;
			CREATE TABLE  &&var&i AS SELECT * FROM  dictionary.&&var&i;
		quit;
 
	%end;
%mend;
 
%tout;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 13h24   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Une autre approche

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PROC CONTENTS DATA=SASHELP.SHOES OUT=OUT;
RUN;
 
PROC SORT DATA=OUT;
BY VARNUM;
RUN;
 
DATA _NULL_;
SET OUT END=EOF;
IF EOF THEN CALL SYMPUT("NB_variable",_N_);
CALL SYMPUT("VARIABLE"!!LEFT(_N_),NAME);
RUN;
 
/* Si jamais tu veux l'utilise dans une boucle*/
 
%MACRO AFFICHAGE;
	%DO i=1 %TO &NB_variable.;
	%PUT &&VARIABLE&i.;
	%END;
%MEND;
 
%AFFICHAGE;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 13h26   #9
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
sorry megamed ,mais ta méthode n'est pas optimisée. Enfin la proc contents est coûteuse.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 13h29   #10
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Et tu crois que du SQL est pas lourd en temps de traitement?
Chacun a sa manière de procéder et je ne dirai pas que la mienne est plus optimale
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 13h55   #11
Invité régulier
 
Homme Damien Guiavarch
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Damien Guiavarch
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 8
Points : 8
Merci, ça marche très bien
damien29 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 10h15.


 
 
 
 
Partenaires

Hébergement Web