Vous n'êtes pas identifié.
Vous êtes sur le forum du master ESA !
Le site du master ESA - description de la formation, notes de cours, contacts... vient de déménager !!!
Venez visiter notre nouveau site : www.master-esa.fr
Pages: 1
Bonjour!
J'essaye de soumettre le suivant code:
%macro jointure (data1,data2,data3,variables,var_1); proc sql; create table &data3 as select &variables from &data1 , &data2 order by &var_1; quit; %mend jointure; %let variables=prenom1, nom1, pays1, prenom2, nom2, pays2; %jointure (lib.maitre2,lib.ajout2,lib.joint,&variables,prenom);
et à la fin j'ai ça comme erreur:
ERROR: More positional parameters found than defined.
Je suis allé regarder sur internet, mais je ne trouve encore une solution... Merci!
Hors ligne
En fait, je sais que mon problème provient de l'utilisation des "," (virgules) dans ma macro variable, et même, selon ce document:
http://support.sas.com/resources/papers … 8-2012.pdf , page 16, avant de la conclusion...
Mais j'arrive pas à faire marché la macro.....
Hors ligne
Je viens de trouver une solutions provisoire:
%macro jointure (data1,data2,data3,var_1); proc sql; create table &data3 as select * from &data1 , &data2 order by &var_1; quit; %mend jointure; %jointure (lib.maitre2,lib.ajout2,lib.joint,prenom1);
J'ai enlevé les variables, et dans la partie SELECT du PROC SQL, j'ai mis une étoile "*".
Par contre, je préfère mettre des variables, si quelqu'un arrive, ou si j'arrive... merci de mettre une solution
Hors ligne
oh le beau problème de quoting !
relisez attentivement les pages 412 à 415 de votre livre d'introduction à SAS préféré, vous comprendrez alors pourquoi votre journal vous a envoyé ce message et vous comprendrez aussi pourquoi mon programme fonctionne :
data toto; input a b c ; cards; 1 2 3 ; %macro oscar(var); proc sql ; select &var from toto; quit; %mend; %oscar(%bquote(a,b,c));
vous pouvez reposer votre question sur www.sas-sr.com ?
je vous assure que vous aurez la même réponse mais ça pourra être utile à d'autres ;-)
Hors ligne
Ah! Trop fort Mr SR, mais j'ai une autre solutions aussi!
%macro jointure (data1,data2,data3,variables,var1); data _null_; call symput("variables",compress(&variables,'"')); Run; proc sql; create table &data3 as select &variables from &data1 , &data2 order by &var1; quit; %mend jointure; %let variables="prenom1, prenom2, nom1, nom2, pays1, pays2"; %jointure (lib.maitre2,lib.ajout2,lib.joint,&variables,prenom1);
Et ça marche aussi! Comme du Opus Focus!
ça marche, je vais poser cette question ce soir ... question pour un beau mercredi ?
Sinon merci aussi de votre réponse!
Hors ligne
bizarre votre truc... habituez vous plutôt à gérer les problèmes de quoting plutôt que de passer par des trucs bizarres...
en fait, ce qui me gène le plus, c'est que votre jointure ne va correctement fonctionner que si vos deux tables ne présentent aucune variable en commun (mais bon, puisqu'il s'agit de réaliser un produit cartésien...)
Hors ligne
Merci mister Ringuedé pour la solution du problème de quoting! j'en ai déjà rencontré et j'ai du faire un bricolage à la marocaine de plusieurs lignes alors qu'il suffisait d'utiliser cette fonction qui va surement rendre mes programmes plus sexy!
Hors ligne
mais lisez les pages 412 à 415 de mon bouquin au lieu d'inventer des solutions "à la marocaine" ;-)
un truc valable "à la marocaine", c'est le tajine, pas du code bizarre sous SAS
Hors ligne
Pages: 1