Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Débutez
Débutez Forum concentrant les premières questions que l'on se pose en tant que débutant
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 21/01/2010, 16h26   #1
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Par défaut Macro qui effectue une proc sql et place le résultat dans une macro-variable globale : call execute

J'ai une macro qui effectue une proc sql et place le résultat dans une macro-variable globale :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
%macro FoundInTable(MyTable, MyVar, MyValue)  / store;
	%global NbOcc;
 
	%let NbOcc=10;
 
	/* Recherche d'une occurence &MyValue dans &MyTableRef pour la variable &MyVar */
	%IF &MyValue ne '' %then %do;
		proc sql noprint;
			SELECT COUNT(1) INTO :NbOcc FROM &MyTable WHERE &MyVar=%STR(%')&MyValue%STR(%');
		quit;
	%end;
%mend;
Cette macro est lancée par un call execute dans une étape data.

Même en intercalant un je n'arrive pas à récupérer le résultat de la proc sql;

là j'ai initialisé NbOcc à 10 pour voir et je récupère 10 au lieu du résultat escompté (1, vérifié quand j'exécute la proc sql toute seule).

En utilisant au retour de la macro je récupère . à la place de 1.


Verriez-vous un moyen simple de "sortir" cette valeur de la macro ?
Sinon je mettrai le code de la proc sql en dehors de la macro.

Merci.

__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2010, 16h54   #2
Membre confirmé
 
Inscription : janvier 2010
Messages : 185
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 185
Points : 250
Points : 250
Bonjour Filippo,

Je te conseille la lecture de ce lien doc sas sur call execute

On peut y lire ceci:

Note: Because macro references execute immediately and SAS statements do not execute until after a step boundary, you cannot use CALL EXECUTE to invoke a macro that contains references for macro variables that are created by CALL SYMPUT in that macro.
sasadm est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/01/2010, 17h02   #3
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Merci sasadm.

Je crois que je vais exécuter une première proc sql et placer les résultats dans une table temporaire puis merger avec la table de départ puis appliquer ma condition.

__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo 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 23h16.


 
 
 
 
Partenaires

Hébergement Web