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 12/11/2011, 18h21   #1
Candidat au titre de Membre du Club
 
Femme
Conseil - Consultant en systèmes d'information
Inscription : novembre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 80
Points : 12
Points : 12
Par défaut Problème de syntaxe table&i.champ&i

Bonjour,

j'ai des tables u&i (construites ds une boucle %do i %to) et chaque table contient un champ ch&i. J'ai besoin d'utiliser table&i.ch&i dans la clause where dans une &tape proc sql mais ca marche pas avec cette syntaxe : table&i.ch&i
J'ai essayé table&i!!"."!!ch&i mais ca marche po aussi.
Merci d'avance pour votre aide.
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 22h49   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
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 : 957
Points : 1 368
Points : 1 368
Salut,
Pour moi, tu as juste besoin du nom de la variable dans la clause where(Pourquoi &table.?).
Si tu utilises des alias, tu n'as pas besoin du nom de la table (exemple: from test as a left join test2 as b where a.&ch=b.&ch )
Tu peux poster le code que tu veux automatiser?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 23h31   #3
Candidat au titre de Membre du Club
 
Femme
Conseil - Consultant en systèmes d'information
Inscription : novembre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 80
Points : 12
Points : 12
Bjr,

voici la partie du code ou je me trouve bloquée, je dois mentioner le nom de la table suivie du champ pour faire la mise à jour.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13

%do i=0 %to &&n.+1;
data u&i;
merge t&i v&i; 
run;

proc sql;
select formule into :form&i separated by ',' from u&i;
UPDATE sasuser.interm SET z= "&&form&i" WHERE interm.z=u&i.comp&i;
quit;

%end;
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 13h03   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
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 : 957
Points : 1 368
Points : 1 368
As-tu essayé ?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 20h14   #5
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Citation:
Envoyé par aminao Voir le message
Bjr,

voici la partie du code ou je me trouve bloquée, je dois mentioner le nom de la table suivie du champ pour faire la mise à jour.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13

%do i=0 %to &&n.+1;
data u&i;
merge t&i v&i; 
run;

proc sql;
select formule into :form&i separated by ',' from u&i;
UPDATE sasuser.interm SET z= "&&form&i" WHERE interm.z=u&i.comp&i;
quit;

%end;
Bonsoir,

Ajoute l'option mprint avant d'exécuter ta macro, regarde dans la log le code générer.
z= "&&form&i" et interm.z=u&i.comp&i
Dans le première affectation Z est de type caractère, dans la deuxième affectation Z est de type numérique!!!! Il faut vérifier le type de Z.
pourquoi &&n.?
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 11h28   #6
Candidat au titre de Membre du Club
 
Femme
Conseil - Consultant en systèmes d'information
Inscription : novembre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 80
Points : 12
Points : 12
Bjr,

comp&i est un champ da la table u&i de type alphanumérique, quand je fé

where z=u&i..comp&i; il affiche l'erreur suivante :
Code :
1
2
3
 
MPRINT(CALCUL_IND1):   UPDATE interm SET z="1000,2000" WHERE top=0 AND z=u1.comp1;
ERROR: Unresolved reference TO TABLE/correlation name u1.
]
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 11h36   #7
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Tu es en sql, u1.comp1 => u1 alias sur une table (from table as u1) comp1 c'est le nom d'une table SAS.
Comme tu compares des chaines de caractères, il faut les mettre en deux quotte ""
WHERE interm.z="u&i.comp&i";
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 11h46   #8
Candidat au titre de Membre du Club
 
Femme
Conseil - Consultant en systèmes d'information
Inscription : novembre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 80
Points : 12
Points : 12
quand je fé comme ca

Code :
WHERE z="u&i..comp&i.";
il cherche quand est ce que z vaut lachaine "u1.comp1" ou "u2.comp2"..
et non pas le champ comp&i de la table u&i

Code :
1
2
SYMBOLGEN:  Macro variable I resolves TO 3
MPRINT(CALCUL_IND1):   UPDATE interm SET z="6000" WHERE top=0 AND z="u3.comp3";
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 11h51   #9
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Avant d'écrire du code en macro il faut le tester en code simple (sans macro)
Après tu peux le rendre dynamique.
Tu fais référence à des choses qui n'existe pas dans ton code. Les alias u1 u2 ... ils sont définis ou?
Je t'invite à écrire pour i =1 le code complet, tu le test.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 12h28   #10
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
il y a un problème dans le SQL
il faut écrire un truc du genre
Citation:
proc sql;
select formule into :form&i separated by ',' from u&i;
UPDATE sasuser.interm
SET z= "&&form&i"
WHERE interm.z=(select comp&i from u&i where interm.z= comp&i;
quit;
Je pense qu'il y a des solutions plus simple à ton problème.
Ton code devient rapidement compliqué.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui 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 06h58.


 
 
 
 
Partenaires

Hébergement Web