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 25/12/2007, 12h01   #1
Membre habitué
 
Inscription : juillet 2006
Messages : 283
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 283
Points : 106
Points : 106
Par défaut Construire une liste de variables avec leur longueur

Bonjour tout le monde,

Je cherche à construire une liste contenant les variables d'une table SAS et leur longueur, c'est à dire de la forme :

KEYVAR 8 VAR1 8 VAR2 8 VAR3 8 VAR4 8 VAR5 8 VAR6 8 VAR7 8 VAR8 8

Pour cela je construit 2 listes (une des noms de variables et l'autre de leur longueur) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*--------------------------------------------------------------------*/
/*---RECUPERER LA LISTE DES NOMS DES VARIABLES ET DE LEUR LONGUEUR----*/
/*--------------------------------------------------------------------*/
 
PROC SQL NOPRINT; 
 
   CREATE TABLE NAMELIST2 AS 
   SELECT NAME,LENGTH
   FROM DICTIONARY.COLUMNS
   WHERE LIBNAME EQ "WORK" AND MEMNAME EQ "TABLE1"; 
 
   %SYMDEL NAMELIST2;   /* POUR SUPPRIMER LA MACRO VARIABLE */
 
   SELECT NAME INTO :LISTNAME SEPARATED BY ' ' FROM NAMELIST2;
   SELECT LENGTH INTO :LISTLENGTH SEPARATED BY ' ' FROM NAMELIST2;
 
   QUIT;
 
%PUT &LISTNAME;
%PUT &LISTLENGTH;

Ensuite pour construire la liste voulue, j'essaie ce code (mais ça ne marche pas )

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
DATA _NULL_;
RETAIN I 1;
TMP1=SCAN("&LISTNAME",I);
TEMP=%STR(&LISTLENGTH);
TMP2=SCAN("&TEMP",I);
 DO WHILE (TMP1 NE ' ');
 CALL SYMPUT (BIGLIST,COMPRESS(TMP1)|| '' || COMPRESS(%STR(TMP2)));
 I+1;
 TMP1=SCAN ("&LISTNAME",I);
 TMP2=SCAN ("&LISTLENGTH",I);
 END;
RUN;
 
%PUT &BIGLIST;
Merci de votre aide.

ash_rmy.
ash_rmy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2007, 16h56   #2
Membre habitué
 
Inscription : juillet 2006
Messages : 283
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 283
Points : 106
Points : 106
C'est bon : j'ai trouvé la fonction SAS CATX.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PROC SQL NOPRINT; 
 
   CREATE TABLE NAMELIST2 AS 
   SELECT NAME,LENGTH
   FROM DICTIONARY.COLUMNS
   WHERE LIBNAME EQ "WORK" AND MEMNAME EQ "TABLE1"; 
 
   %SYMDEL NAMELIST2;   /* POUR SUPPRIMER LA MACRO VARIABLE */
   SELECT CATX(' ',NAME,LENGTH) INTO :LNAMELENGTH SEPARATED BY ' ' FROM NAMELIST2;
 
*
   DROP TABLE NAMELIST2;  /* POUR SUPPRIMER LA TABLE NAMELIST1 */
 
   QUIT;
 
%PUT &LNAMELENGTH;
ash_rmy.
ash_rmy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 09h24   #3
Responsable SAS
 
Inscription : septembre 2006
Messages : 1 973
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 973
Points : 4 807
Points : 4 807
Ton programme est très intéressant pour obtenir des infos sur les variables.
fafabzh6 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 11h50.


 
 
 
 
Partenaires

Hébergement Web