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 18/08/2011, 17h59   #1
Invité de passage
 
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 1
Points : 1
Par défaut macro et sélection d'obervations

Bonjour,

J'ai de nouveau besoin de vous !
Dans la table SAS, j'ai deux variables : ref (qualitative) et quant

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DATA TABLE;
input ref $ quant;
cards;
L53 3
L53 10
L53 32
L53 2
M08 24
M08 5
M08 4
M08 18
M08 5
B5 33
;
run;
proc print DATA=TABLE;
run;
Je crée ensuite une macro TEST.
Je donne un identifiant à chacune des références avec le code ci dessous :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
%macro test();
 
DATA iden (keep=ref quant j);
SET TABLE ;
IF _n_ = 1 then j = 0;
IF ref NE lag(ref) then j+1; /*quand on change de well on rajoute 1*/
run;
 
DATA _null_;
SET iden;
call symputx("j",j);
run;
D'une part, j'aimerais pouvoir récupérer le nombre d'identifiants de la table (ici 3) et ensuite sélectionner les observations en fonction de l'identifiant mais j'obtiens des erreurs :

Code :
1
2
3
4
5
6
7
%do j=1 %TO 3;
proc sql;
CREATE TABLE iden1 AS
SELECT ref, quant FROM iden WHERE j=&j;
%end;
 
%mend test;
Merci beaucoup !
yemal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 18h58   #2
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
ton code fonctionne bien. Quelle est ton erreur ?

tu veux combien de tables au final ?
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 09h09   #3
Invité de passage
 
Inscription : juillet 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 16
Points : 1
Points : 1
Par défaut réponse

oui j'ai un bon résultat mais j'aimerais récupérer le nombre d'identifiant également...
Et pourquoi dans la boucle do il faut écrire %do j=1 %to 3 et pas %do &j=1 %to 3 car j devient une macro-variable après le call symputx ?

Merci encore
yemal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 10h01   #4
Membre du Club
 
Homme Fabien
Inscription : novembre 2008
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Localisation : France

Informations forums :
Inscription : novembre 2008
Messages : 59
Points : 56
Points : 56
Citation:
Envoyé par yemal Voir le message
oui j'ai un bon résultat mais j'aimerais récupérer le nombre d'identifiant également...
Et pourquoi dans la boucle do il faut écrire %do j=1 %to 3 et pas %do &j=1 %to 3 car j devient une macro-variable après le call symputx ?

Merci encore
Bonjour,

Oui apres le call symputx, j est bien une macro variable.
Mais lorsque tu écris %do j=1 %TO 3, ton ancienne macro variable j est remplacé par la nouvelle qui va prendre les valeurs 1 puis 2 et enfin 3.

A ta place j'utiliserais un autre nom de macro variable dans ta boucle.

Code :
1
2
3
4
5
6
7
%do i=1 %TO 3;
proc sql;
CREATE TABLE iden1 AS
SELECT ref, quant FROM iden WHERE &i. = &j;
quit;%end;
 
%mend test;
Cordialement

Suistrop
suistrop est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h19.


 
 
 
 
Partenaires

Hébergement Web