Rechercher : dans
Par :

Faire une macro pour un format SAS

Dernière réponse le 23 jan 2008 à 16:38:28 fabienne35, le 23 jan 2008 à 11:04:23 
 Signaler ce message aux modérateurs

Bonjour,
j'ai besoin d'aide je voudrais faire une macro pour définir un format, voila ce que j'ai pour le moment

%macro formperso(mavar);
proc format;
value mavar
%do n=&min. %to &max2.+100 %by 100;
/*la boucle doit générer des lignes de ce type et le ; */
2000-<2100='2000 à 2100'
2100-<2200='2100 à 2200'
2200-<2300='2200 à 2300'
2300-<2400='2300 à 2400'
2400-<2500='2400 à 2500'
2500-<2600='2500 à 2600'
2600-<2700='2600 à 2700'
2700-<2800='2700 à 2800'

%put &n;
%end;
%mend;
%formperso;

est-ce qu'il faut faire un print ?

Merci de l'aide que vous pourrez m'apporter.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Faire une macro pour un format SAS » dans :
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...
Bases de données - Utilisation de formulaires VoirUtilisation de formulaires Afin d'exploiter les bases de données, il faut fournir une interface à l'utilisateur lui permettant de visualiser des données en fonction de certains critères. Pour cela il existe un outil : les formulaires. Un formulaire...

1

steelspirit, le 23 jan 2008 à 12:08:09

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

- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah Ah Ah !

Répondre à steelspirit

2

fabienne35, le 23 jan 2008 à 14:00:30

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.

Répondre à fabienne35

3

steelspirit, le 23 jan 2008 à 15:21:38

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

- T'as pas vu Chloraine ?
- C'est qui Chloraine ? - Ah Ah Ah !

Répondre à steelspirit

4

 fabienne35, le 23 jan 2008 à 16:38:28

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;

Répondre à fabienne35
Collection CommentÇaMarche.net