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 19/07/2011, 16h43   #1
Membre régulier
 
Homme Olivier Caelen
Inscription : août 2007
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Olivier Caelen
Localisation : Belgique

Informations forums :
Inscription : août 2007
Messages : 68
Points : 81
Points : 81
Par défaut Passage d’une série de macros variables à un macro programme.

Bonjour ,

J’ai cherché toute cette après midi et je ne trouve pas la solution...

J’ai une série de macros variables par exemple (le nombre de macro variable (ici 8) est un paramètre) :
&cnt1 &cnt2 &cnt3 &cnt4 &cnt5 &cnt6 &cnt7 &cnt8

Comment faire pour crée un macro programme qui peut recevoir ce array de macros variables ?

Pour être plus claire ; dans l’exemple qui suit, je voudrais par exemple afficher la valeur de la dernière macro variable :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*J'ai remplacé les parties que je ne connais pas par [...]*/
 
%let cnt1 = 1;
%let cnt2 = 5;
%let cnt3 = 7;
%let cnt4 = 2;
%let cnt5 = 3;
%let cnt6 = 7;
%let cnt7 = 1;
%let cnt8 = 2;
%let cnt9 = 8;
 
%affiche([...],9); /*Exécution de mon macro programme*/
 
/*Création de mon macro programme*/
%MACRO affiche ([...] , nb);
	%PUT cnt&nb;
%MEND affiche;
Merci
hoccha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 17h18   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
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 : 956
Points : 1 366
Points : 1 366
Faut d'abord passer par une table avant de pouvoir stocker en ligne

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
%MACRO M(nb=);
 
%let cnt1 = 1;
%let cnt2 = 5;
%let cnt3 = 7;
%let cnt4 = 2;
%let cnt5 = 3;
%let cnt6 = 7;
%let cnt7 = 1;
%let cnt8 = 2;
%let cnt9 = 8;
 
DATA tt;
%do i=1 %TO &nb.;
chaine=&&cnt&i.;
output;
%end;
run;
 
 
proc sql;
SELECT chaine INTO:liste separated BY " " FROM tt;
quit;
 
%put &liste.;
 
%MEND;
 
%M(nb=8);
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h35   #3
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 hoccha Voir le message
Bonjour ,

J’ai cherché toute cette après midi et je ne trouve pas la solution...

J’ai une série de macros variables par exemple (le nombre de macro variable (ici 8) est un paramètre) :
&cnt1 &cnt2 &cnt3 &cnt4 &cnt5 &cnt6 &cnt7 &cnt8

Comment faire pour crée un macro programme qui peut recevoir ce array de macros variables ?

Pour être plus claire ; dans l’exemple qui suit, je voudrais par exemple afficher la valeur de la dernière macro variable :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*J'ai remplacé les parties que je ne connais pas par [...]*/
 
%let cnt1 = 1;
%let cnt2 = 5;
%let cnt3 = 7;
%let cnt4 = 2;
%let cnt5 = 3;
%let cnt6 = 7;
%let cnt7 = 1;
%let cnt8 = 2;
%let cnt9 = 8;
 
%affiche([...],9); /*Exécution de mon macro programme*/
 
/*Création de mon macro programme*/
%MACRO affiche ([...] , nb);
	%PUT cnt&nb;
%MEND affiche;
Merci
Bonjour,

La notion d'array n'existe que dans une étape DATA.
Je ne vois pas pourquoi tu veux créer un tableau pour passer tes macros variables à ta macro. Tes macros variables sont globales par rapport à ta macro => elles sont visibles.
Code ci-dessous:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
/*J'ai remplacé les parties que je ne connais pas par [...]*/
 
%let cnt1 = 1;
%let cnt2 = 5;
%let cnt3 = 7;
%let cnt4 = 2;
%let cnt5 = 3;
%let cnt6 = 7;
%let cnt7 = 1;
%let cnt8 = 2;
%let cnt9 = 8;
 
 
/*Création de mon macro programme*/
%MACRO affiche ( nb);
	%PUT &&cnt&nb;
%MEND affiche;
%affiche(9);
__________________
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 10
Vieux 26/07/2011, 12h57   #4
Membre régulier
 
Homme Olivier Caelen
Inscription : août 2007
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Olivier Caelen
Localisation : Belgique

Informations forums :
Inscription : août 2007
Messages : 68
Points : 81
Points : 81
A ben je ne savais pas que les macros variables était visible pas les autres macros programme (tout est global donc ?). J’avais fini pas abandonner l’idée d’utiliser une macro programme et fixer les valeurs dans mon code (et donc mon code n’était pas flexible). Merci ! Je vais remodifier cette partie.

Note : Je me trompe peut-être, mais dans un langage ce n’est pas très propre de pouvoir lire les variables non définie dans la fonction.
A quoi sert-il alors de passer les macros variables en argument à une macro programme ? On peut voir que ce code fonctionne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
%let cnt1 = 1;
%let cnt2 = 5;
%let cnt3 = 7;
%let cnt4 = 2;
%let cnt5 = 3;
%let cnt6 = 7;
%let cnt7 = 1;
%let cnt8 = 2;
%let cnt9 = 8;
 
%let nb = 7;
 
%MACRO affiche ();
	%PUT &&cnt&nb;
%MEND affiche;
%affiche();
 
/*Le code affiche 1*/
hoccha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 14h31   #5
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
hello,
concrètement ,c'est quoi que tu veux faire ? ou quel est l'intéret ?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 15h04   #6
Membre régulier
 
Homme Olivier Caelen
Inscription : août 2007
Messages : 68
Détails du profil
Informations personnelles :
Nom : Homme Olivier Caelen
Localisation : Belgique

Informations forums :
Inscription : août 2007
Messages : 68
Points : 81
Points : 81
Merci S_A_M mais le problème est déjà résolu.
J’avais une série de macros variables et je voulais pouvoir les passer en argument à un un macro programme. Pour cela, je croyais qu’il fallait crée une sorte de tableau de macros variables et ensuite passé ce tableau comme argument.
Bahraoui m’a expliqué que ce n’est pas utile car les macros variables sont visible dans mon macro programme.
hoccha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 15h08   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
sorry,
c'est juste après lecture de ton code , je n'ai pas pu comprendre l'intérêt.
s_a_m 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 04h27.


 
 
 
 
Partenaires

Hébergement Web