Faire une macro pour un format SAS
Résolu/Fermé
fabienne35
Messages postés
11
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
20 avril 2010
-
23 janv. 2008 à 11:04
titi - 21 avril 2010 à 15:33
titi - 21 avril 2010 à 15:33
A voir également:
- Format macro variable sas
- Format epub - Guide
- Telecharger format factory - Télécharger - Conversion & Codecs
- Format apfs - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
5 réponses
steelspirit
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
80
23 janv. 2008 à 12:08
23 janv. 2008 à 12:08
Bonjour,
Que contient &min et &max2 ? pourquoi faire +100 et %by 100 ?
%put ne sert qu'a afficher la valeur de la macro-variable dans la log
Steel
Que contient &min et &max2 ? pourquoi faire +100 et %by 100 ?
%put ne sert qu'a afficher la valeur de la macro-variable dans la log
Steel
steelspirit
Messages postés
277
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
22 octobre 2008
80
23 janv. 2008 à 15:21
23 janv. 2008 à 15:21
Merci pour ces précisions ! il faut utiliser %sysevalf pour additionner 100 à &n.
voici la solution :
%macro formperso(mavar=);
proc format;
value &mavar
%do n=&min. %to %sysevalf(&max2+100) %by 100;
&n -< %sysevalf(&n+100)="&n à %sysevalf(&n+100)"
%end;
; /* ne pas oublier le ; qui ferme value */
quit;
%mend;
%formperso(mavar=);
Steel
voici la solution :
%macro formperso(mavar=);
proc format;
value &mavar
%do n=&min. %to %sysevalf(&max2+100) %by 100;
&n -< %sysevalf(&n+100)="&n à %sysevalf(&n+100)"
%end;
; /* ne pas oublier le ; qui ferme value */
quit;
%mend;
%formperso(mavar=);
Steel
fabienne35
Messages postés
11
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
20 avril 2010
23 janv. 2008 à 14:00
23 janv. 2008 à 14:00
Normalement mon format c'est :
proc format;
value mavar
1500-<1600='1500 à 1600'
1600-<1700='1600 à 1700'
1700-<1800='1700 à 1800'
...
24600-<24700='24600 à 24700'
24700-<24800='24700 à 24800'
other='indéterminé';
run;
Le but est d'avoir un pg de qq lignes seulement au lieu de 238 !
Comme la valeur maximum dépend de la base sur laquelle je travaille j'ai paramètré le maximum pour qu'il soit adapté à chaque base.
C'est la valeur maximum de la variable à laquelle je voudrais appliquer le format.
La valeur minimum est sous forme de paramètre aussi (là c'est moi qui la fixe).
Le but est de faire des classes avec un pas de 100.
Je fais un by 100 pour qu'à la prochaine étape il avance de 100.
Je fais n+100 pour dire la borne supérieur de mon intervalle
%macro formperso;
proc format;
value mavar
%do n=&min. %to &max2. %by 100;
&n.-<&n.+100=' &n. à &n.+100' /*C'est là que je ne sais pas comment faire*/
%end;
;
%mend;
J'espère être assez claire.
proc format;
value mavar
1500-<1600='1500 à 1600'
1600-<1700='1600 à 1700'
1700-<1800='1700 à 1800'
...
24600-<24700='24600 à 24700'
24700-<24800='24700 à 24800'
other='indéterminé';
run;
Le but est d'avoir un pg de qq lignes seulement au lieu de 238 !
Comme la valeur maximum dépend de la base sur laquelle je travaille j'ai paramètré le maximum pour qu'il soit adapté à chaque base.
C'est la valeur maximum de la variable à laquelle je voudrais appliquer le format.
La valeur minimum est sous forme de paramètre aussi (là c'est moi qui la fixe).
Le but est de faire des classes avec un pas de 100.
Je fais un by 100 pour qu'à la prochaine étape il avance de 100.
Je fais n+100 pour dire la borne supérieur de mon intervalle
%macro formperso;
proc format;
value mavar
%do n=&min. %to &max2. %by 100;
&n.-<&n.+100=' &n. à &n.+100' /*C'est là que je ne sais pas comment faire*/
%end;
;
%mend;
J'espère être assez claire.
fabienne35
Messages postés
11
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
20 avril 2010
23 janv. 2008 à 16:38
23 janv. 2008 à 16:38
Merci pour ton aide
En fait j'avais arrondi le maximum.
Ma macro ne doit pas avoir de paramètre elle doit enregistrer un format pour que je puisse le rappeller après.
Donc mon pg ressemble à :
proc sql noprint;
select max(mavar) into:max
from mabase;
quit;
/*Macro pour faire les tranches de 100 € */
%let min = 100;
/*Arrondir le maximum*/
data _null_;
call symput("max2", round(&max,100));
run;
%macro formpers;
proc format;
value monformat
%do n=&min. %to &max2. %by 100;
&n.-<%eval(&n+100)=" &n. à %eval(&n+100)"
%end;
other='indéterminé';
run;
%mend;
%formpers;
En fait j'avais arrondi le maximum.
Ma macro ne doit pas avoir de paramètre elle doit enregistrer un format pour que je puisse le rappeller après.
Donc mon pg ressemble à :
proc sql noprint;
select max(mavar) into:max
from mabase;
quit;
/*Macro pour faire les tranches de 100 € */
%let min = 100;
/*Arrondir le maximum*/
data _null_;
call symput("max2", round(&max,100));
run;
%macro formpers;
proc format;
value monformat
%do n=&min. %to &max2. %by 100;
&n.-<%eval(&n+100)=" &n. à %eval(&n+100)"
%end;
other='indéterminé';
run;
%mend;
%formpers;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question