Salut tout le monde
en faite je cherche à écrire un code SAS qui me permet de tirer à partir de la table matable les nom des variables que leurs observation contiennent le symbole ">" . pour que je puisse faires des instructions pour ces variables ?
Salut tout le monde
en faite je cherche à écrire un code SAS qui me permet de tirer à partir de la table matable les nom des variables que leurs observation contiennent le symbole ">" . pour que je puisse faires des instructions pour ces variables ?
Bonjour.
Avec un ARRAY et une proc SQL, comme Alers te le proposait dans un autre post traitant exactement de la même question (ou alors je n'ai pas vu la différence).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28 DATA work.tunistat ; /* création d'un jeu d'essai */ INPUT var1 $ var2 $ var3 $ var4 $ var5 $ var6 $ var7 $ var8 $ var9 $ var10 $ ; DATALINES ; a < b c d < e f < g < h < < < i j k l m n o p q r s t u v w ; RUN ; DATA work.variables ; SET work.tunistat ; ARRAY mesVariables $ var1-var10 ; DO OVER mesVariables ; /* sur chaque élément de l'Array */ IF INDEX(mesVariables,"<")>0 /* si cette variable contient un "<" */ THEN DO ; nomVar = VNAME(mesVariables) ; /* on stocke le nom de la variable */ OUTPUT ; /* on conserve en sortie */ END ; END ; RUN ; /* au final, il y aura des doublons si plusieurs observations d'une même variable contiennent des < */ PROC SQL NOPRINT ; SELECT DISTINCT nomVar /* DISTINCT = sans doublons */ INTO : listeVar SEPARATED BY " " FROM work.variables ; QUIT ; /* affichage de la valeur de la macro-variable LISTEVAR dans la log */ %PUT la liste est &listeVar ;
Bon courage.
Olivier
Dans mon cas lorsque je cite la prémiere variable et la dérniere variable séparé par "-" je croise l'erreur suivantequel est le probléme ma table dispose de plus 100 variables les sept prémieres sont numériques le reste est alphanumérique j'ai mais la prémiere variable alphanumérique et la dérniere mais ça fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ERREUR: Suffixe numérique manquant dans la liste de variables numérotées
Dans tes variables numériques il n'y aura pas de <, on peut donc les oublier.
Une alternative est d'écrire ARRAY mesVariables $ _CHARACTER_ ; et éviter ainsi de les nommer explicitement.
Bon courage.
Olivier
je viens de créer un porgramme macro dans lequel deux variables macro une table et un nom de variable .
je trouve la table3 vide sachant que lorsque je fais avec les macros ça fonctionne correctement .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 %Macro SEPARATION (ds,variable) ; ........... %Mend ; %SEPARATION(work.table3var);
C'est peut-être à cause de la fin de semaine mais je n'ai pas du tout compris ton dernier message. ^^
Peux-tu déjà écrire ici le macro-programme que tu as concocté histoire qu'on puisse t'aider à le corriger si problème il y a ?
Tu dis que tu trouves ta table3 vide mais que ça fonctionne avec des macros. Que veux-tu dire par là ? Quand tu passes par un programme sans macro tu as une table3 vide, mais avec une macro tu obtiens un autre résultat ?
Peut-être que tu ne vois rien dans la log mais que quelque chose cloche. Deux options qui pourraient t'aider à repérer ton problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 OPTION MPRINT; /* Inscrit dans la log le code SAS exécuté (tu n'as que le résultat des data step et procédures si tu n'utilises pas cette option. */ OPTION MLOGIC; /* Indique la valeur de tes variables quand tu fais des %IF. */
je suis désolé , j'ai pas bien posé le probléme
au premier lieu j'ai stocké mes variables à traiter comme Olivier a mentionné .
maintenant j'ai crée un macro programme comme suit
l'objectif est de générer le macro programme pour toutes les variables stockés au début .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 %Macro SEPARATION (ds,variable) ; ........... %Mend ;
ça ve dire je veux éviter d'écrire à chaque foi
Voila .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 %SEPARATION(work.table1,var1); %SEPARATION(work.table2,var2); %SEPARATION(work.table3,var3); .................
Merci encore une fois .
A brûle-pourpoint je dirais que tu peux créer une seconde macro, très courte, dans laquelle tu ferais une boucle %DO i = 1 %TO ta valeur maximale.
Et si tu as un nombre de variables et tables qui n'est pas fixe et que tu n'as pas envie d'entrer le nombre, tu dois sans aucun doute pouvoir le stocker automatique dans une macro variable avant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 %MACRO boucle(nombre=); %DO i = 1 %TO &nombre.; %SEPARATION(work.table&i.,var&i.); %END; %MEND;
dsl la liste des variables pour laquelle je veux génrer mon macro programme est dirivé du programe précédant
Donc la liste est nommée LISTEVAR
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28 DATA work.tunistat ; /* création d'un jeu d'essai */ INPUT var1 $ var2 $ var3 $ var4 $ var5 $ var6 $ var7 $ var8 $ var9 $ var10 $ ; DATALINES ; a < b c d < e f < g < h < < < i j k l m n o p q r s t u v w ; RUN ; DATA work.VARIABLES ; SET work.tunistat ; ARRAY mesVariables $ var1-var10 ; DO OVER mesVariables ; /* sur chaque élément de l'Array */ IF INDEX(mesVariables,"<")>0 /* si cette variable contient un "<" */ THEN DO ; nomVar = VNAME(mesVariables) ; /* on stocke le nom de la variable */ OUTPUT ; /* on conserve en sortie */ END ; END ; RUN ; /* au final, il y aura des doublons si plusieurs observations d'une même variable contiennent des < */ PROC SQL NOPRINT ; SELECT DISTINCT nomVar /* DISTINCT = sans doublons */ INTO : listeVar SEPARATED BY " " FROM work.VARIABLES ; QUIT ; /* affichage de la valeur de la macro-variable LISTEVAR dans la log */ %PUT la liste est &listeVar ;
donc je devais écrire DISTEVAR au lieu de nombre dans votre propsition ??
Bonsoir,
Dans ce cas la, une ligne à changer dans la proc sql d’Olivier et une petite modification da la macro d’Alers. L’idée est de stocker chaque nom de variable de la liste dans une macro variable.
Bon weekend à vous tous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 PROC SQL NOPRINT ; SELECT DISTINCT nomVar, LEFT(PUT(COUNT(*), 4.)) /* DISTINCT = sans doublons */ INTO : mac1-:mac999, :nombre FROM work.VARIABLES ; QUIT ; %MACRO boucle ; %DO i = 1 %TO &nombre.; %SEPARATION(work.table&i., mac&i.); %END; %MEND; %boucle ;
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