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 10/12/2010, 15h50   #1
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Par défaut Automatisation de full join avec une macro

Bonjour,

Pour joindre entre elles 12 tables je dois répéter 12 "full join" successifs. Je voudrais bien automatiser l'opération dans une macro, ce serait plus propre (et réutilisable!). Cependant je ne trouve pas la syntaxe adéquate...

Voici le code d'un full join type:

Code :
1
2
3
4
5
6
7
 
PROC SQL;
	CREATE TABLE DB_Meteo2 AS
	SELECT *
	FROM DB_Meteo1 AS a full JOIN Db_meteo_ag1 AS b
	ON a.Date= b.Date;
quit;
Il faudrait que l'opération se répète de i= 1 à 12.
Les noms des fichiers sources sont bien compatibles, dans la macro ils pourront être référencés comme: DB_Meteo&i et DB_Meteo_AG&i. On crée à chaque fois un fichier DB_Meteo&i que l'on reprend systématiquement pour la jointure à gauche suivante et on lui joint le Db_meteo_ag&i correspondant.

Merci pour votre aide!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h54   #2
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Bonjour,

J'apporte la solution à ma question.
Par rapport à ce que j'avais annoncé, j'ai un peu modifié ma démarche. Comme toutes mes tables ne comportaient pas le même nombre d'années référencées, j'ai fait une table Base_Date_An avec toutes les années communes à toutes les tables que je veux joindre. C'est peut-être superflu, mais plus sûr. Ensuite j'ai joint toutes les tables DB_Meteo_AG&i à Base_Date avec un Full join.

Voici le code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
%macro FullJoin;
	PROC SQL;
		CREATE TABLE DB_Meteo_Fusion AS
		SELECT * FROM Base_Date_An
			%do i = 1 %TO 12;
		full JOIN Db_meteo_ag&i
		ON Base_Date.Date= Db_meteo_ag&i..Date
			%end;;
quit;
%mend FullJoin;
%FullJoin;
Les points qui m'ont posé problème sont:
  • les deux points après Db_meteo_ag&i dans la déclaration de variable commune;
  • la syntaxe macro qui veut que le ; qui va à la fin de la ligne "on Base_Date.Date= Db_meteo_ag&i..Date
    " en statique doit être positionné après "%end;" en dynamique. Il y a donc deux ; à la suite après le end.

Mes remarques pourront peut-être être utiles à quelqu'un.

Astrid
AstridG 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 22h18.


 
 
 
 
Partenaires

Hébergement Web