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/01/2011, 10h05   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 29
Points : 10
Points : 10
Par défaut Execution d'une requête sur un serveur à l'aide d'un macro-programme

Bonjour,

J’aimerais avoir une macro qui effectue une requête SQL sur la table MYTABLE en ne sélectionnant que les enregistrements dont la colonne IDENTIFIANT (de type alpha) correspond au paramètre ID passé à la macro.
Ma macro semble fonctionner mais ne retourne aucun enregistrement alors qu’il devrait en avoir.
Voici ma macro :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
%MACRO MonQuery (Id);
RSUBMIT;
PROC SQL;
CONNECT TO DB2;
CREATE TABLE Tmp AS
SELECT * FROM CONNECTION TO DB2 (SELECT *
FROM MYTABLE A
WHERE IDENTIFIANT = &Id
);
DISCONNECT FROM DB2;
QUIT;
PROC DOWNLOAD DATA=Tmp;
RUN;
ENDRSUBMIT;
%MEND MonQuery;
...
%MonQuery("1234567");
...
Quelqu’un a-t-il une idée ? J’espère avoir été clair dans mes explications.
Merci d’avance.
benbrisefer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 10h14   #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 identifiant est
- peut être composé de blanc autour de la valeur
- n'as pas cette valeur. as-tu essayé par une simple étape DATA + libname DB2 ?

Tu as allégé le code pour le forum ou tu ne passes pas de paramètres à ton CONNECT ?
__________________
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 12/01/2011, 10h16   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonjour.
Je crois que le souci est que ton macro-programme est défini en local (sur le PC) et du coup, son paramètre, la macro-variable ID, aussi. Or ta proc SQL s'exécute sur le serveur, qui ne connaît pas &ID.
Il faudrait ajouter une instruction de transfert, %SYSLPUT, pour que ta session SAS serveur connaisse la valeur de &ID.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%MACRO MonQuery (Id);
%SYSLPUT idServeur = &id ;
RSUBMIT;
PROC SQL;
CONNECT TO DB2;
CREATE TABLE Tmp AS
SELECT * FROM CONNECTION TO DB2 (SELECT *
FROM MYTABLE A
WHERE IDENTIFIANT = &idServeur 
);
DISCONNECT FROM DB2;
QUIT;
PROC DOWNLOAD DATA=Tmp;
RUN;
ENDRSUBMIT;
%MEND MonQuery;
...
%MonQuery("1234567");
...
L'autre solution serait de tout mettre dans un bloc RSUBMIT, y compris les instructions %MACRO, %MEND et l'appel au macro-programme.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
RSUBMIT;
%MACRO MonQuery (Id);
PROC SQL;
CONNECT TO DB2;
CREATE TABLE Tmp AS
SELECT * FROM CONNECTION TO DB2 (SELECT *
FROM MYTABLE A
WHERE IDENTIFIANT = &Id
);
DISCONNECT FROM DB2;
QUIT;
PROC DOWNLOAD DATA=Tmp;
RUN;
 
%MEND MonQuery;
...
%MonQuery("1234567");
...
ENDRSUBMIT;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 11h06   #4
Candidat au titre de Membre du Club
 
Inscription : juillet 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 29
Points : 10
Points : 10
Par défaut Query dans Macro

Merci pour vos réponse.
En fait, le problème semble être lié au type de colonne (alpha).
J'ai en effet un message d'erreur du type
Code :
ERROR: VIEW selection criteria OR WHERE clause IS NOT valid
lorsque j'exécute la macro de la façon suivante
Et aucun message lorsque je l'exécute de la manière suivante Je ne sais comment faire pour que dans le query ma variable Indice soit interprétée '1234567' et non pas 1234567.
Merci.
benbrisefer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 11h13   #5
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
essaye avec in au lieu d'un = dans ton where

Code :
WHERE IDENTIFIANT IN ("&idServeur")
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 11h13   #6
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Dans une macro-variable, tout est du texte. Donc si tu mets des guillemets, ils font partie de la valeur. Si tu veux des apostrophes, tu les mets dans ta valeur lors de l'appel au macro-programme :
%MonQuery('2622');
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 11h59   #7
Candidat au titre de Membre du Club
 
Inscription : juillet 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 29
Points : 10
Points : 10
Par défaut Query dans Macro

Un tout grand merci à tous.
Le lancement de la macro doit bien se faire de la manière suivante %MonQuery('2622');
benbrisefer 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 19h54.


 
 
 
 
Partenaires

Hébergement Web