/* Ensemble de macros écrites par Patrick BROSSIER (GIP RECLUS) pour convertir les couleurs de cmy en rgb utilisé par SAS cmyrgbd initialise le processus de conversion des couleurs cmyrgb convertit des couleurs cmy données en pourcentage en couleur rgb de base 256 rgbrgb permet de rentrer des couleurs en rgb base 256 dans le processus cmyrgbp génère des "pattern" à partir des couleurs fournies précédemment cmyrgbc génère un tableau SAS à partir des couleurs fournies précédemment cmyrgbf termine le processus de conversion des couleurs Macros utilisées: %temp pour cmyrgbp Version du 11/08/03 */ %macro cmyrgbd; /* macro d'initialisation du processus de conversion */ data tempoc; %mend; %macro cmyrgb(v1,v2,v3); /* cette macro convertit des couleurs cmy données en pourcentage en couleur rgb de base 256 */ v1=ceil((100-&v1)*2.55); v2=ceil((100-&v2)*2.55); v3=ceil((100-&v3)*2.55); output; %mend; %macro rgbrgb(v1,v2,v3); /* cette macro permet de rentrer des couleurs en rgb base 256 dans le processus */ v1=&v1;v2=&v2;v3=&v3; output; %mend; %macro cmyrgbp; %global temp typetemp; %temp; /* cette macro génère des pattern à partir des couleurs fournies précédemment attention: elle commence par effacer tous les pattern existant */ goptions reset=pattern; data _NULL_;set tempoc; file "&temp.tempoc" &typetemp; patt=compress('pattern'!!put(_N_,2.)); if v1=v2 & v2=v3 then put patt 'value=solid color=GRAY' v1 hex2. ';'; else put patt 'value=solid color=CX' (v1-v3)(3*hex2.) ';'; run; %inc "&temp.tempoc"; %mend; %macro cmyrgbc(data,id); /* data tableau contenant les variables "couleur" et les variables données par id id liste de variables identifiant les lignes. Certaines macros (cercles ou camemb exige que cette variable s'appelle ID */ /* cette macro génère un tableau SAS à partir des couleurs fournies précédemment */ data &data; set tempoc; length couleur $8; &id=_N_; if v1=v2 & v2=v3 then couleur='GRAY'!!put(v1,hex2.); else couleur='CX'!!put(v1,hex2.)!!put(v2,hex2.)!!put(v3,hex2.); keep &id couleur; run; %mend; %macro cmyrgbf; /* cette macro est à appeler à la fin pour faire le ménage */ proc datasets dd=work NOLIST NOWARN FORCE NOFS;delete tempoc;quit; %mend;