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 09/12/2011, 16h40   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Utiliser la valeur numérique d'une macro-variable?

Bonjour à tous,

Je veux automatiser les sorties de mes statistiques descriptives pour gagner du temps dans la rédaction de mes rapports.

J'ai commencé à créer une macro avec comme paramètres ma table de données et ma liste de variables à décrire, j'utilise ensuite une macro-fonction pour calculer le nombre de mots (donc de variables) que je stocke dans une macro-variable avec un %let, mais je me heurte à un problème de taille, je ne peux pas utiliser le résultat de ma macro-variable comme valeur numérique.
Et donc quand j'arrive à l'étape %do, je reste bloqué...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
%macro descriptive(DATA=,var=,ref=,delim=|,ssgroupe=);
	     DATA TABLE; SET _null_;run;
	     /* Nombre de variables  à décrire? */
 
                  %let nbvar=%nbmot(&var,&delim); 
 
                 /* Nombre de sous-groupes */
	     %let nbssgroupe=%nbmot(&ssgroupe,&delim);
 
	   /* Création des macro-variables à décrire */
	     %do i=1 %TO &nbvar;
		%let var&i=%scan(&var,&i,&delim);
		%let ref&i=%scan(&ref,&i,&delim);
	%end;

Y-a-t'il un moyen de remédier à ce problème ou dois-je changer l'approche du problème?

Merci d'avance pour les réponses apportées.
Laurent Q. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 17h51   #2
Membre du Club
 
Homme Jérémy Noël
Consultant Support Client SAS
Inscription : mai 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Homme Jérémy Noël
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant Support Client SAS
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2011
Messages : 38
Points : 58
Points : 58
Bonjour,

Si vous créez une macro-variable, vous pouvez imposer que la sortie soit numérique avec:

Code :
new=%sysfunc(input(&old,"informat numérique")
Ce code n'est pas testé.

Cependant lors de la création d'une macro variable, la valeur stocké est du "texte" et peut toujours être interprétée comme caractère ou comme numérique. Le problème peut venir de Cordialement,

Frajen
frajen est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 13/12/2011, 18h43   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Euh Jérémy, INPUT fait précisément partie des quelques fonctions non supportées par %SYSFUNC, précisément parce qu'il n'y a pas de notion de type dans une macro-variable.
Dans le programme de Laurent, je penche aussi pour un souci avec %NBMOT. Laurent, tu peux utiliser
Code :
%SYSFUNC(COUNTW(&var, &delim))
ou quelque chose dans cet esprit.
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h39   #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 717
Points : 1 717
Hello;
c'est ce que tu recherches ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
%macro  var (tab=, var=, dlm=);
%let nb_var= %sysfunc(countc(&var.,"&dlm"));
 
   %do i=1 %TO %eval(&nb_var.-1);
         %put < %scan(&var,&i,"&dlm")>;
         DATA %scan(&var,&i,"&dlm");
            SET &tab. (keep= %scan(&var,&i,"&dlm"));
         run;
   %end;
 %mend;
 
 %var (tab=sashelp.class, var="name|age|sex", dlm=| );
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 17h17   #5
Invité de passage
 
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Merci pour les réponses, avec le code:

Code :
 %let nbvar=%SYSFUNC(COUNTW(&var,&delim));
Je peux ré-utiliser ma macro-variable dans une boucle %do et ma macro s'exécute.

Merci pour l'astuce
Laurent Q. 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 22h20.


 
 
 
 
Partenaires

Hébergement Web