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 04/11/2011, 16h54   #1
Futur Membre du Club
 
Inscription : mars 2007
Messages : 101
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 101
Points : 15
Points : 15
Par défaut Macro ne fonctionne pas dans une étape DATA

Bonjour,

Je travaille sur de la remise en forme de données d'une vieille base, pour injection dans une nouvelle BDD. Je viens vous soumettre un bug que je ne comprends pas

Si vous pouviez éclairer ma lanterne...

Préparation d'un jeu d'essai : adresse / Code Postal / VILLE avec des valeurs vides. Je cherche à regrouper dans une 4ème variable ces 3 variables sous condition (les 3 doivent être non vides)

Code :
1
2
3
4
5
6
7
8
9
10
DATA test;
INFILE cards delimiter='/' MISSOVER DSD;
attrib Adresse length =$22;
input Adresse $ CP VILLE $;
cards;
2 Rue de la République/75000/PARIS
/69000/LYON
Boulevard de Gaulle//RENNES
;
run;
Essai1 : avec une macro. Ne fonctionne pas. Toutes les lignes sont concaténées systématiquement (la condition est toujours vraie).
Code :
1
2
3
4
5
6
7
8
9
%macro mon_test(nomfichier=);
DATA &nomfichier;
SET &nomfichier;
%IF  %sysfunc(compress(Adresse)) ^= '' AND %sysfunc(compress(CP)) ^= '' AND %sysfunc(compress(VILLE)) ^= '' %then %do;
		ADRCOMPL=strip(strip(Adresse) ||' / ' || strip(CP) || ' /  ' || strip(VILLE));
%end;
 
run;
%mend mon_test;
Essai2 : avec une étape DATA. Fonctionne.
Code :
1
2
3
4
5
6
7
8
DATA test;
SET test;
 
IF  compress(Adresse) ^= '' AND compress(CP) ^= '' AND compress(VILLE) ^= '' then do;
		ADRCOMPL=strip(strip(Adresse) ||' / ' || strip(CP) || ' /  ' || strip(VILLE));
end;
 
run;
Pourquoi la macro ne fonctionne pas ?

Merci beaucoup, cela défie ma logique et je me creuse la tête en vain...
cladoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 17h02   #2
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
Hello;
pour la première macro qui "MARCHE PAS"; il te faut des IF et non pas des %IF;
Code :
1
2
3
4
5
6
7
8
9
 
%macro mon_test(nomfichier=);
DATA &nomfichier;
SET &nomfichier;
IF  compress(Adresse) ^= '' AND compress(CP) ^= '' AND compress(VILLE)^= '' then 
		ADRCOMPL=strip(strip(Adresse) ||' / ' || strip(CP) || ' /  ' || strip(VILLE));
 
run;
%mend mon_test;
Si t'es en version SAS V9 ,utilises le NOT MISSING au lieu de faire des compress à chaque fois.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 09h36   #3
Futur Membre du Club
 
Inscription : mars 2007
Messages : 101
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 101
Points : 15
Points : 15
Bonjour,
merci, je comprends mieux.
cladoo 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 06h13.


 
 
 
 
Partenaires

Hébergement Web