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 25/11/2011, 18h27   #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 Recherche d'une valeur dans une colonne d'une table

Bonjour,

Je voudrais réaliser une macro qui me retourne 1 si la variable existe dans la colonne indiquée de la table et 0 sinon, j'ai fé la macro suivante mais il y'a un prob. Merci bien d'avance pour votre aide.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%macro VarExiste(TABLE,colonne,variable);
proc sql;
SELECT count(*) INTO :nb FROM &TABLE;
SELECT &colonne INTO :val separated BY '|' FROM &TABLE;
quit;
%do i=1 %TO &nb;
%let var&i=%scan(&val,&i,'|');
%IF &variable=&&var&i %then %do;
      %let existe=1;
%end;
%else %do;
      %let existe=0;
%end;
%end;
&existe 
%mend;
%VarExiste(sasuser.teste,code_ind,Ind1);
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 19h02   #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 717
Points : 1 717
Ce sujet est déjà été traité ICI. Merci de faire une petite recherche.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 20h07   #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
Cette macro permet bien de chercher si la valeur existe ou non dans la colonne de la table "table" . Mais je veux récupérer la valeur retournée (0 ou 1) pour l'utiliser dans un test conditionnel IF après c'est pourqui j'ai ajouté la ligne avant dernière '&resultat' pour me retourner 0 ou 1 mais ca marche pas
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 21h09   #4
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
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 : 957
Points : 1 368
Points : 1 368
Bonjour,
J'ai pratiquement pas touché à ton programme:

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
DATA toto;
input age;
cards;
48
78
96
69
;
run;
 
%macro VarExiste(TABLE,colonne,variable);
proc sql noprint;
SELECT count(*) INTO :nb FROM &TABLE;
SELECT &colonne INTO :val separated BY '|' FROM &TABLE;
quit;
%do i=1 %TO &nb;
%let var&i=%scan(&val,&i,'|');
%IF &variable=&&var&i %then %do;
      %let existe=1;
%end;
%else %do;
      %let existe=0;
%end;
%end;
%let resultat=&existe.;
%put resultat=&resultat.;
%mend;
%VarExiste(toto,age,69);
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 22h19   #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
mais quand je veux utiliser la valeur retournée par la macro dans un %IF ca marche pas

Code :
1
2
3
4
5
6
7
8
%macro test;
%IF %VarExiste(toto,age,69) %then %do;
proc sql; 
SELECT * FROM toto;
quit;
%end;
%mend;
%test;
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 22h55   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
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 : 957
Points : 1 368
Points : 1 368
Normal que ça ne marche pas puisque la première macro ne retourne pas 0 ou 1, donc il faut tester la valeur de résultat pour effectuer la suite de l’opération

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
30
31
32
33
34
35
36
37
38
DATA toto;
input age;
cards;
48
78
96
69
;
run;
 
%macro VarExiste(TABLE,colonne,variable);
proc sql noprint;
SELECT count(*) INTO :nb FROM &TABLE;
SELECT &colonne INTO :val separated BY '|' FROM &TABLE;
quit;
%do i=1 %TO &nb;
%let var&i=%scan(&val,&i,'|');
%IF &variable=&&var&i %then %do;
      %let existe=1;
%end;
%else %do;
      %let existe=0;
%end;
%end;
%let resultat=&existe.;
%put resultat=&resultat.;
 
%IF &resultat=1 %then %do;
proc sql; 
CREATE TABLE tr_5 AS
SELECT * FROM toto;
quit;
%end;
%mend;
%VarExiste(toto,age,10);
 
 
%VarExiste(toto,age,69);
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 23h06   #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
Apparement, j'étais po assez claire, je veux utiliser %varexiste() dans une autre macro , autrement dire faire appel de cette macro dans un %if qui appartient à un autre programme, c'est pourquoi j'ai besoi que cette macro me retourne une valeur
aminao est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 23h11   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 957
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 : 957
Points : 1 368
Points : 1 368
Retourner un résultat, je sais pas faire mais à defaut tu peux faire ça

Code :
1
2
3
4
5
6
7
8
9
10
11
%global resultat;
 
%macro test;
%IF &resultat=1 %then %do;
proc sql;
CREATE TABLE ttt AS 
SELECT * FROM toto;
quit;
%end;
%mend;
%test;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 11h40   #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
Un code plus simple
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
%macro VarExiste(TABLE,variable);
OPTION mprint;
%global res;
%let res=0;
proc contents DATA=&TABLE out=res_cont noprint; run;
proc sql;
SELECT count(*) INTO :res  FROM res_cont WHERE NAME=%upcase("&variable");
quit;
%mend;
%VarExiste(sashelp.adomsg,text);
%put &res;
__________________
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é
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h30.


 
 
 
 
Partenaires

Hébergement Web