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/11/2011, 23h52   #1
Candidat au titre de Membre du Club
 
Femme
Conseil - Consultant en systèmes d'information
Inscription : novembre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 80
Points : 12
Points : 12
Par défaut correction %macro fonction

Bonjour,
Merci bien de m'aider à corriger cette macro, elle a comme paramètres deux: un sous forme "X+Y-Z" et le deuxième contient les valeurs de X Y et Z séparés par virgule "10,20,5" . La macro doit retourner comme résultat "10+20-5"

Code :
1
2
3
4
5
6
7
8
9
10
11
%macro REPLACE(a,b);
DATA n;
result0=a;
%do i=1 %TO 2;
ch1&i=scan(b,&i,',');
ch2&i=scan(a,&i,'+||\/||-||*');
result&i=tranwrd(result(&i-1),ch2&i,ch1&i);
%end;
run;
%mend;
%REPLACE("X+Y","10,20");
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 01h47   #2
Candidat au titre de Membre du Club
 
Femme
Conseil - Consultant en systèmes d'information
Inscription : novembre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 80
Points : 12
Points : 12
J'ai corrigé qques erreurs mais ca fonctionne po encore parfaitement,en fait il y'a un rob avec tranwrd, il faut soit ne pas interpreter les "" dans result&j ou bien ajouter les "" à ch1&i mais comment le faire



Code :
1
2
3
4
5
6
7
8
9
10
11
12
%macro REPLACE(a,b);
DATA n;
result0=&a.;
%do i=1 %TO 2;
ch1&i=scan(&b.,&i,',');
ch2&i=scan(&a.,&i,'+||\/||-||*');
%let j=%eval(&i-1);
result&i=tranwrd(result&j.,ch2&i,ch1&i);
%end;
run;
%mend;
%REPLACE("X+Y","10,20");
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 20h25   #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
Il manque des %let, tu crées des macros variables..
Code :
1
2
3
%let ch1&i=scan(b,&i,',');
%let ch2&i=scan(a,&i,'+||\/||-||*');
%let result&i=tranwrd(result(&i-1),ch2&i,ch1&i);
Essaye d'afficher les résultats à l'aide d'un %put au fur est a mesure pour trouver rapidement les problèmes
__________________
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 13/11/2011, 22h10   #4
Candidat au titre de Membre du Club
 
Femme
Conseil - Consultant en systèmes d'information
Inscription : novembre 2011
Messages : 80
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 80
Points : 12
Points : 12
Merci bcp Bahraoui, c'est résolu:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%macro REPLACE(a,b);
DATA n;
result0=&a.;
%let cpt=%sysfunc(countc(&a.,'+'))+%sysfunc(countc(&a.,'-'))+%sysfunc(countc(&a.,'*'))+%sysfunc(countc(&a.,'/'));
%put &cpt.;
%do i=1 %TO &cpt.+1;
%let ch1&i=scan(&b.,&i,',');
%put &&ch1t&i.;
%let ch2&i=scan(&a.,&i,'+||\/||-||*');
%put &&ch2&i.;
%let j=%eval(&i-1);
result&i=tranwrd(result&j,&&ch2&i.,&&ch1&i.);
z&i=result&i.;
%end;
run;
%mend;
%REPLACE("X+Y-C+R+D","10,20,30,40,50");
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 09h39   #5
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
cool que ça marche
__________________
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 00
Vieux 14/11/2011, 09h50   #6
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 011
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 011
Points : 1 712
Points : 1 712
oui c'est cool , il manque juste de cliquer sur
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 07h00.


 
 
 
 
Partenaires

Hébergement Web