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 22/09/2011, 14h45   #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 Importer données

Bonjour,

Pourriez-vous m'indiquer pourquoi ce code me donne systématiquement une erreur : la table Export n'existe pas ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
%MACRO Info(SasTable);
       PROC SORT DATA=&SasTable NODUPKEYS;
            BY ID;
       RUN;
%MEND Info;
 
DATA Export;
     INPUT ID $;
	 CARDS;
     1000000
	 2000000
	 3000000
RUN;
 
%Info("Export");
benbrisefer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h24   #2
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
Ce ne serait pas ton
qui devrait être
sans les double quotes?
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/09/2011, 15h42   #3
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
En effet, sans les quotes, ça marche ...
Mais alors, avec cette petite variante, comment faire ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%MACRO Info(SasTable);
RSUBMIT;
PROC UPLOAD DATA=&SasTable OUT=Tmp;
RUN;
ENDRSUBMIT;
%MEND Info;
 
DATA Export;
INPUT ID $;
CARDS;
1000000
2000000
3000000
RUN;
 
%Info(Export);
Dans ce cas, toujours même problème ... peut-être autre problème d'ailleurs
benbrisefer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h43   #4
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 828
Points : 2 828
+1 L007, ce sont les guillemets qui mettent le programme par terre.
Plus précisément, un principe majeur du langage macro est que, dans le monde macro, tout est du texte. Donc pas besoin d'indiquer des valeurs entre guillemets, sauf si les guillemets font partie de la valeur.
Basiquement, &toto fait un copier/coller de la valeur de TOTO là où elle a été définie. Tu te retrouves donc avec un code
Code :
PROC SORT DATA="export" etc.
que tu n'aurais jamais écrit directement.

Deux remarques donc pour finir et prévenir des problèmes futurs :
1) toujours commencer par écrire le code SAS brut et le tester avant d'ajouter la couche macro
2) pour vérifier ce qu'un macro programme génère comme code SAS tu peux exécuter
et tu verras le code s'afficher dans le journal (la Log).

Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h49   #5
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 828
Points : 2 828
Ah, nos messages se sont croisés.
Le 2e cas est différent du 1er, le souci vient du RSUBMIT.
A partir de cette instruction, le code est exécuté sur le serveur. Or la macro-variable SASTABLE est définie, elle, sur le PC. Il faudrait soit la dupliquer sur le serveur (il y a une macro-instruction %SYSLPUT pour faire ça) ou écrire plus simplement le macro-programme sur le serveur.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
RSUBMIT;
%MACRO Info(SasTable);
PROC UPLOAD DATA=&SasTable OUT=Tmp;
RUN;
%MEND Info;
ENDRSUBMIT;
 
DATA Export;
INPUT ID $;
CARDS;
1000000
2000000
3000000
RUN;
RSUBMIT ;
%info(export) ;
ENDRSUBMIT ;
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 16h40   #6
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
Ok, merci pour ces informations très instructives !
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 17h45.


 
 
 
 
Partenaires

Hébergement Web