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 15/11/2011, 16h59   #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 %eval d'un champ alphanumérique

Bonjour,

J'ai un champ alphanumérique nommé "Formule" ds une table qui a la structure suivante:

Formule
---------------------------
1000 +2000 |
etape1.Ind0+etape0.Ind2 |
3000+5000 |
etape1.Ind2/etape1.Ind3 |

Je veux evaluer les champ dont la valeur vaut 1000+2000 et 3000+5000
sauf que c'est po possible avec %eval puisqu'il s'agit d'un champ alphanumérique, y'a t-il autres manières pour le faire ?
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 17h07   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 713
Points : 1 713
t'as la fonction FIND
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 17h18   #3
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
je pense que find equivalent à index pour faire la recherche d'un mot ou caractère et non po pour évaluer une opération arithmétique, non?
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 17h27   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 713
Points : 1 713
oui c'est à peu prés sa , c'est quoi que t'appel évaluer ou bien que veux tu faire au juste ?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 17h35   #5
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
je veux évaluer opération 1000+2000 sachant qu'elle est sauvegardée dans une variable alphanumérique
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 17h38   #6
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Moi je pense que si ton évaluer correspond à faire la somme de 1000+2000, donc 3000 (par exemple). Une solution pourrait etre une somme conditionnelle couplée avec Find.
Si avec le Find tu trouves 'etape' , tu fais rien sinon tu fais %eval.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 17h50   #7
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
le problème que %eval n'accepte po des variables de type alphanumerique
par exempl le code suivant ne foncionne po

Code :
1
2
3
4
DATA _null;
%let c="100+200";
z=%eval(&c.);
run;
or si je fé:
Code :
1
2
3
4
DATA _null;
%let c=100+200;
z=%eval(&c.);
run;
ca marche, ma question y'a t-il po uen façon pour évaluer
"1000+2000" sans faire la conversion du type
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 18h01   #8
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
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 012
Points : 1 713
Points : 1 713
Je crois que tu te compliques beaucoups la vie!!.
pour extrtaire les numérique , il faut utiliser les expressions régulières ,
moi j'ai bricolé un truc vite fait. tu peux utiliser les call symput pour stoquer les résultats dans des macros variables sinon passer pas des %sysfunc et %eval, tu peux aussi ajouter des IF pour ne traiter que les cas que tu veux :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
DATA test;
INFILE cards ;
input formule $60.;
cards;
1000 +2000 |
etape1.Ind0+etape0.Ind2 |
3000+5000 |
etape1.Ind2/etape1.Ind3 |
;
run;
 
 
DATA calcule;
SET test;
a = input(scan (compress ( formule, 'abcdefghijkImnopqrstuvwxyz |/ . '),1,'+'),best.)+  input(scan (compress ( formule, 'abcdefghijkImnopqrstuvwxyz |/ . '),-1,'+'),best.);
run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/11/2011, 09h15   #9
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
ça peut dépanner

Code :
1
2
3
%let formule="1000 +2000";
%let f=%eval(%sysfunc(compress( &formule,'"')));
%put &f;
__________________
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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h26.


 
 
 
 
Partenaires

Hébergement Web