Posts Tagged ‘proc report’

Protégé : Une option SAS 9.2 pour ODS PDF : répéter une valeur groupée sur plusieurs pages
août 3, 2010
Ajouter des indentations dans un tableau
octobre 20, 2008Avec PROC REPORT et PROC TABULATE, SAS crée des tableaux à partir d’un jeu de donnée (SAS data set). Dans certains cas, la lisibilité de ces tableaux est améliorée en ajoutant des indentations au texte (to indent). Nous verrons donc ici deux approches possibles : l’option INDENT de PROC TABULATE et le caractère hexadécimal pour les blancs dans PROC REPORT.
1. Un exemple pour illustrer la syntaxe sur les indentations
Dans les essais cliniques, trois types de tableaux/listings sont produits :
- Démographie (demography) : descriptif des patients en terme d’âge, de sexe, de pays, etc.
- Efficacité (efficacy) : l’efficacité du médicament par rapport à un autre ou par rapport à un effet placebo (le patient prend en médicament en pensant qu’il est actif alors qu’il ne l’est pas).
- Sécurité (safety) : ces tableaux permettent l’analyse des effets secondaires d’un médicament.
Je vais prendre la cas d’un tableau démographique version réduite (trois colonnes) pour présenter la syntaxe sur les indentations.
- La première colonne contient les caractéristiques démographiques (sexe et pays),
- la seconde colonne compte le nombre de patients (N) pour chaque caractéristique
- la troisième colonne donnera la répartition des patients en pourcentage (%).
--------------------------------- | | N | % | |-------------------------------| |Gender | | | Male | 12| 48 %| | Female | 13| 52 %| |Country | | | France | 6| 24 %| | Belgium | 10| 40 %| | Luxemburg | 9| 36 %| ---------------------------------
Des variables numériques pour ordonner les valeurs : Pour faciliter le tri des données, j’ai choisi d’avoir des variables numériques dans mon data set SAS sur lesquelles j’applique des formats.
- Ainsi la premier variable (GRP) réfère à l’intitulé des caractéristiques démographiques : Gender (1) Country (2).
- La seconde variable (SUBGRP) est l’ordre pour chaque caractéristique. J’aurais pu choisir des valeurs de 1 à 5 mais j’ai préféré que chaque chiffre des décimal corresponde à la variable GRP.
data patient_info; input grp subgrp cnt_n pct_n; datalines; 1 11 12 0.48 1 12 13 0.52 2 21 6 0.24 2 22 10 0.40 2 23 9 0.36 ; run;
Je choisi de créer des formats du même nom (GRP et SUBGRP) :
proc format; value grp 1='Gender' 2='Country'; value subgrp 11='Male' 12='Female' 21='France' 22='Belgium' 23='Luxemburg'; run;
En outre, je crée un format avec PICTURE pour l’affichage des pourcentages. La raison est la suivante : par défaut, deux chiffres après la virgules apparaissent avec PROC TABULATE. De plus, je souhaite voir le symbole % s’afficher pour chaque pourcentage.
Un format BEST5. est ajouté pour des fréquences composées jusqu’à 5 chiffres sans décimale. De plus, il remplace les points par des blancs. Cela servira pour PROC REPORT.
proc format; picture pct (round) . = '' other = '099 %' (multiplier=100); value cnt . = ' ' other = [best5.]; run;
Dans les deux exemples qui suivent une indentation est formée de trois blancs.
2. L’option INDENT de PROC TABULATE
Dans l’exemple suivant, les deux variables GRP et SUBGRP sont traitées comme des variables textuelles.
L’instruction TABLE contient l’option INDENT= et précise ainsi le nombre de blancs pour décaler les valeurs de la variable SUBGRP vers la droite. Le résultat a été donné en début d’article.
proc tabulate data=patient_info noseps; class grp subgrp; table grp=''*subgrp='', cnt_n='N'*sum=' '*f=5. pct_n='%'*sum=' '*f=pct. / rts=20 indent=3; format grp grp. subgrp subgrp.; run;
Les options NO=SEPS et RTS= sont là pour personnaliser la mise en forme. Pour plus de précisions sur ces options, vous pouvez consulter la documentation en ligne :
- NOSEPS sur la page « PROC TABULATE Statement »
- RTS= sur la page « TABLE Statement »
3. Créer des variables alphanumériques (caractères) avec PROC REPORT
Ajouter une ligne pour chacune des caractéristiques : Toutes les informations sont créées manuellement. Ainsi, il y a en plus une ligne pour chaque groupe dans le data set SAS. Au lieu d’avoir 5 lignes, on en aura 7. Pour chaque nouveau GRP, la variable SUBGRP prendre la valeur du GRP + un zero afin d’apparaître en premier dans le rapport après un tri.
proc sort data = patient_info out = patient_report; by grp subgrp; run;
data patient_report; set patient_report; by grp subgrp; output; if first.grp then do; subgrp=grp*10; cnt_n=.; pct_n=.; end; run;
Trier par SUBGRP pour afficher les données dans l’ordre voulu.
proc sort data=patient_report; by grp subgrp; run;
Une fois triées les données sont toujours numériques.
grp subgrp cnt_n pct_n 1 10 . . 1 11 12 0.48 1 12 13 0.52 2 20 . . 2 21 6 0.24 2 22 10 0.40 2 23 9 0.36
Créer des variables caractères : la variable DSPLAY nouvellement créée peut contenir jusqu’à 15 caractères. Elle est composée des variables GRP et SUBGRP converties avec la fonction PUT.
Des hexadécimales pour créer des blancs : Les espaces sont créés à partir de valeurs hexadécimales. On répète ici trois fois A0 entre guillemets pour créer trois espaces. La lettre x qui suit précise à SAS qu’il s’agit d’hexadécimales. Ces trois blancs sont concaténés au résultat de la fonction PUT grâce aux deux barres.
data patient_report; length dsplay $15; set patient_report; if subgrp=0 then dsplay=put(grp,grp.); else dsplay='A0A0A0'x || put (subgrp,subgrp.); cnt_c=put(cnt_n,cnt.); pct_c=put(pct_n,pct.); run;
Trier les données : La variable SUBGRP sert uniquement à définir l’ordre d’affichage des données mais n’apparaît pas dans le tableau final (option NOPRINT dans l’instruction DEFINE).
Enlever le titre de la colonne : La variable DSPLAY contient les caractéristiques démographiques. Aucun nom n’apparaîtra dans le titre de la colonne. Si les guillemets vides ne sont pas précisés, le nom de la variable est affiché.
Aligner à droite : Les variables caractères CNT_C et PCT_C sont affichées en tant que texte (DISPLAY) et leurs observations sont alignées à droite plutôt que d’être centrées (option RIGHT).
proc report data=patient_report; columns subgrp dsplay cnt_c pct_c; define subgrp / noprint order order=data; define dsplay / ' ' display; define cnt_c / 'N' display right; define pct_c / '%' display right; run;
Dans ce cas, la sortie se présente sans ligne autour du cadre :
N % Gender Male 12 48 % Female 13 52 % Country France 6 24 % Belgium 10 40 % Luxemburg 9 36 %
Sur le blog, vous trouverez d’autres articles sur les notions abordées ici :
- Vous découvrez PROC REPORT ? Cet article vous offre une introduction sur la procédure : 6 notions pour débuter avec PROC REPORT
- L’instruction OUTPUT a servi pour ajouter de nouveaux records dans le data set. Voici un article plus complet sur le sujet : Faire des petits avec l’instruction OUTPUT
- La fonction PUT a permis de créer notre variable caractère DSPLAY à partir de variables numériques et de formats. L’article Convertir une variable caractère en numérique et inversement se consacre à se sujet.
- La syntaxe PICTURE est discutée dans l’article Arrondir ses chiffres avant d’apppliquer un format.

Améliorer l’habillage de vos tableaux (débuter avec PROC TEMPLATE via PROC REPORT)
juin 2, 2008La syntaxe ODS (Output Delivery System) de SAS fait appel à des templates pour définir la mise en forme des tableaux, graphiques à publier. Dans le cas présent, il s’agira de définir un template qui s’appliquera à tous les tableaux générés par un PROC REPORT. Les styles caractérisant les templates sont définis avec la procédure PROC TEMPLATE. Tout d’abord, il s’agit de savoir comment appliquer les styles sans template pour un seul PROC REPORT et ainsi se familiariser avec la syntaxe.
1. Le tableau par défaut
Le programme suivant créé un document RTF (CLASS_V1.RTF) contenant un tableau avec 5 colonnes. Les données proviennent du data set CLASS de la bibliothèque SAS.
ods rtf file = ‘C:/sasreference/class_v1.rtf’;
proc report data=sashelp.class nowd;
columns sex name age height weight;
define sex / display ‘Sexe’;
define name / display ‘Nom’;
define age / display ‘Age’;
define height / display ‘Taille’;
define weight / display ‘Poids’;
run;
ods rtf close;
Le tableau est quadrillé. Les lettres sont alignées à gauche et les chiffres à droite. Le nom des colonnes ont un fond grisé et sont mises en gras. Le tout a une police Times New Roman de taille 10pt.
2. Des styles pour trois destinations différentes
Dans PROC REPORT, on peut ajouter des options au niveau de l’instruction PROC REPORT pour appliquer le résultat à l’intégralité de la table ou dans une instruction DEFINE en particulier pour agir sur une colonne. Il est possible de grouper les deux méthodes. Par exemple, on peut choisir d’avoir des colonnes de trois centimètres partout sauf dans une colonne.
- STYLE(COLUMN) : pour changer les informations au niveau des colonnes, c’est-à-dire les données sans le titre, on ajoutera STYLE(COLUMN)=[…] dans l’instruction DEFINE.
- STYLE(HEADER) : pour modifier les caractéristiques des noms de colonnes, les headers, il faudra utiliser STYLE(HEADERr)=[…]
- STYLE(REPORT) : pour définir les bordures, leur position, couleur et épaisseur, et les espaces entre les cellules, STYLE(REPORT)=[…] est utilisé dans l’instruction PROC REPORT.
3. De multiples options
Les options sont listées dans les crochets, Un espace sert de séparateur entre les options. Voici un aperçu de ces options:
3.1 Agir sur le texte
- FONT_FACE= ou comment définir une police différente de Times : pour changer la police en Arial, on fait appel à FONT_FACE=’Arial’.
- FONT_SIZE= ou comment opter pour une taille de caractères différente de 10pt : pour changer la taille du texte en 12, cela donne FONT_SIZE=12pt.
- FONT_WEIGHT ou comment jongler entre gras et normal : pour mettre en gras, on utilisera FONT_WEIGHT=BOLD. Si au contraire est déjà en gras, et qu’on souhaite le remettre en normal, il faut choisir FONT_WEIGHT=MEDIUM.
- FOREGROUND= ou comment changer la couleur du texte : l’option FOREGROUND= sert à définir la couleur du texte. Ainsi FOREGROUND=DARKBLUE mettra le texte en bleu foncé.
3.2 Agir sur la position du texte
- JUST= ou comment changer l’alignement en largeur du texte dans une cellule : par défaut les lettres sont alignés à gauche et les nombres sont alignés à droite. Pour définir le même alignement partout et ensuite changer ponctuellement si besoin, il y a JUST=. Ainsi, JUST=C (center) centre, JUST=R (right) aligne à droite et JUST=L (left) aligne à gauche.
- VJUST= ou comment changer l’alignement vertical du texte dans une cellule : si le texte d’une case s’étend sur plusieurs lignes, celui des autres cellules est aligné vers le haut. Pour changer l’alignement, on utilise VJUST=BOTTOM.
3.3 Changer la couleur de fond
- STYLE(COLUMN)=[BACKGROUND=…] ou comment changer le fond des cellules contenant les observations.
- STYLE(HEADER)=[BACKGROUND=…] ou comment changer la couleur de fond des titres des colonnes.
- STYLE(REPORT)=[BACKGROUND=… ] ou comment changer l’arrière plan : défini dans STYLE(REPORT), la couleur s’applique à l’arrière du tableau. Si l’espace qui sépare les cellules n’est pas de zéro (CELLSPACING), cette couleur de fond apparaît. Par défaut la couleur noir apparaît entre les cellules. On peut soit changer la couleur pour blanc (BACKGROUND=WHITE) ou réduire l’espace entre les cellules à zéro (CELLSPACING=0).
- CELLWIDTH= ou comment définir la largeur des colonnes : la largeur de toutes les cellules d’une colonne est défini par CELLWIDTH. Cela donne CELLWIDTH=3cm.
3.4 Agir sur les bordures
- BORDERCOLOR= ou comment changer la couleur des bordures
- BORDERWIDTH= ou comment changer la largeur des bordures du cadre (frame).
- FRAME= ou comment décider quels côtés du cadre doivent apparaître : on distingue huit valeurs pour FRAME :
- BOX garde tout le cadre extérieur
- VOID enlève les bords du cadre
- HSIDES (horizontal side) garde les deux côtés horizontaux
- VSIDES (vertical side) garde les deux côtés verticaux
- ABOVE garde la ligne du dessus,
- BELOW garde la ligne du dessous
- LHS (left hand side) garde le côté gauche
- RHS (right hand side) garde le côté droite
- RULES= ou comment décider quelles lignes à l’intérieur du tableau doivent être visible : on a cinq valeurs à disposition pour RULES :
- NONE (none ou aucun) enlève toutes les lignes intérieures
- ROWS (row ou ligne) ne garde que les lignes horizontales
- COLS (column ou colonne) ne garde que les lignes verticales
- GROUP ne garde que la ligne séparant les titres de colonnes, des observations.
Voici donc un schéma récapitulalif des combinaisons de FRAME et RULES lorsque, dans STYLE(REPORT), BACKGROUND=WHITE ou CELLSPACING=0. Pour facilité la lecture, l’effet de FRAME est en noir et celui de RULES est en rouge.
*NB: Cette image contient une erreur : remplacez grps par group.
4. L’effet final avec les options de PROC REPORT
Voici un résumé de l’Exemple ci-dessous :
- Seules les bordures du haut et du bas sont gardées (FRAME=HSIDES), et épaissie (BORDERWIDTH=.2cm) après avoir mis en blanc l’arrière plan du tableau pour qu’il n’apparaisse pas entre les cellules (BACKGROUND=WHITE). On choisi de séparer les titres des valeurs par une ligne (RULES=GROUPS) et de mettre tous les trais en gris (BORDERCOLOR=GRAY).
- Au niveau des titres, la couleur de fond est enlevée (BACKGROUND=WHITE). Une police Arial de 12pt non gras est choisie.
- Enfin au niveau des données, la police est également Arial de taille 12pt. Les colonnes sont de 3 cm de largeur et le texte est aligné à droite.
ods rtf file = ‘C:/sasreference/final_v1.rtf’
style = sasref;
proc report data=sashelp.class nowd
style(report)=[rules = groups
frame = hsides
background = white
/*cellspacing = 0*/
bordercolor = gray
borderwidth = .2cm]
style(header)=[background = white
font_size = 12pt
font_face = ‘Arial’
font_weight = medium]
style(column)=[font_size = 12pt
font_face = ‘Arial‘
cellwidth = 3 cm
just = r];
columns name sex age height weight;
define name / display ‘Nom’;
define sex / display ‘Sexe’;
define age / display ‘Age’;
define height / display ‘Taille’;
define weight / display ‘Poids’;
run;
ods rtf close;
5. Obtenir le même résultat avec un proc template
A présent que vous avez vu les différentes régions sur lesquelles vous pouvez agir et une grande partie des options que vous pouvez changer, voici la syntaxe de PROC TEMPLATE.
Ici, le nouveau template s’appelle SASREF (DEFINE STYLE). Il est basé sur le style par défaut (PARENT=).
proc template;
define style styles.sasref;
parent = styles.default;
/*.à compléter..*/
end;
run;
Vous remarquerez que les informations listées dans REPLACE TABLE sont les mêmes que dans notre précédent ODS(REPORT). Celles listées dans REPLACE HEADER correspondent à celle de ODS(HEADER) et enfin celle de REPLACE DATE sont identiques à ODS(COLUMN).
proc template;
define style styles.sasref;
parent = styles.default;
replace table / rules = groups
frame = hsides
background = white
/*cellspacing = 0*/
bordercolor = gray
borderwidth = .2cm;
replace header / foreground = black
background = white
font_size = 12pt
font_face = ‘Arial’
font_weight = medium;
replace data / background = white
font_size = 12pt
font_face = ‘Arial’
cellwidth = 3 cm
just = r;
end;
run;
Vous noterez en plus l’utilisation de FOREGOUND dans REPLACE HEADER et BACKGROUND dans REPLACE DATA. En effet, si vous appelez le template sans les instructions REPLACE, SAS ajoute un font gris aux données et met les titres en bleu.
A présent, il s’agit de faire référence à ce template dans l’instruction ODS RTF.
ods rtf file = ‘C:/sasreference/class_v1.rtf’
style = sasref;
Avant de terminez, il vous faudra supprimer le template.
proc template;
delete styles.sasref;
run;

5 options courantes de PROC REPORT
avril 4, 2008Après avoir vu les notions de bases de PROC report, je vous propose 5 points de syntaxe que j’utilise régulièrement pour un résultat un peu plus personnalisé.
-
Les points 1 et 2 sont des options de l’instruction PROC REPORT.
-
Le point 3 concerne l’instruction COLUMN.
-
Les points 4 à 5 servent dans les instructions DEFINE.
En fin d’article, vous avez un exemple de syntaxe pour mieux cerner le tout.
1. Changer le symbole coupant les mots pour l’utiliser comme du texte : par défaut, la barre inclinée (/) est le symbole pour les sauts à la ligne dans le titre des colonnes et les valeurs textes. Du coup, si on veut considérer celui-ci comme du texte à part entière, il faut définir un autre caractère pour couper le texte. Par exemple, on peut utiliser le symbole dièse # dans l’option SPLIT=’…’ de l’instruction PROC REPORT
2. Affichez les valeurs manquantes : lorsque des valeurs sont groupées, SAS ignore par défaut les valeurs manquantes (missing et special missing). Pour changer cela, il faut précisez l’option MISSING dans l’instruction PROC REPORT, avec GROUP, ORDER ou ACROSS. Un exemple de la documentation en ligne illustre ce sujet. How PROC REPORT Handle Missing Values. Les valeurs manquantes d’ANALYSIS et DISPLAY restent affichées.
3. Un titre pour plusieurs colonnes : il est possible d’ajouter un titre commun à plusieurs colonnes. Pour cela, il faut agir sur l’instruction COLUMN. Les variables concernées sont listées entre parenthèses. Le nom commun est donné entre guillemets en premier dans les parenthèses.
4. Définir la largeur des colonnes : pour définir la largeur de la colonne, il existe l’option WIDTH=. Cette largeur peut ne pas être suffisante pour afficher tout le texte. Mais, heureusement, il y a l’option FLOW. Celle-ci fait apparaître le texte sur plusieurs lignes, s’il n’y a pas assez de place sur une seule. Cela évite à celui-ci d’être coupé.
Même si, a priori, le texte est contenu dans la largeur défini, il est donc conseillé d’utiliser l’option FLOW pour éviter des coupures involontaires ou repérer plus facilement des textes plus longs que prévus.
5. Et les formats ? : Les formats s’utilisent indifféremment en option dans les instructions DEFINE avec un signe égal ou dans une instruction FORMAT.
Exemple :
proc report data=mesresultats nowd
split=‘#’
missing;
column pays patient_id
(‘Statistiques’ cnt pct);
define pays / display ‘Pays’
format=$cntry.;
define patient_id / display ‘ID’;
define cnt / display ‘N’;
define pct / display ‘%’;
*format pays $cntry.;
run;
NOTE 1 : Les options HEADLINE, HEADSKIP et les tirets bas pour entourer un titre commun à plusieurs colonnes n’ont pas été mentionnés ici car ils perdent leur intérêt avec un ODS RTF.
NOTE 2 : La modification de l’apparence peut-être amélioré en changer le « style » au niveau local c’est-à-dire dans la procédure REPORT ou au niveau global, en créant ou actualisant le Template de la procédure REPORT. Cela pourrait faire l’objet de plusieurs articles tant le sujet est vaste.

6 notions pour débuter avec PROC REPORT
mars 26, 2008
Pour créer un tableau et le publier, la procédure REPORT est disponible. Je vous propose de voir sa structure de base.
1. Lister vos variables avec l’instruction COLUMN : la procédure REPORT doit contenir au minimum une instruction COLUMN listant les variables à publier dans l’ordre d’apparition souhaité.
Pour les utilisateurs de SAS pour Windows, on ajoutera l’option NOWD dans l’instruction PROC REPORT, pour éviter l’ouverture d’une fenêtre indépendante.
2 Personnalisez les colonnes : par défaut, les colonnes auront pour nom celui de la variable. Pour les personnalisez, on ajoute une instruction DEFINE par colonne.
proc report data=result_pat nowd;
column pays pays_txt patient_id cnt pct;
define pays / display ‘ ‘;
define pays_txt / display ‘Pays’;
define patient_id / display ‘ID’;
define cnt / display ‘N’;
define pct / display ‘%’;
run;
3. Privilégiez l’affiche en mode DISPLAY : par défaut les variables textes seront en mode DISPLAY tandis que les variables numériques seront en mode ANALYSIS. En d’autres termes, SAS peut potentiellement regrouper et additionner des valeurs numériques. Je pense notamment lorsqu’on utilise l’option GROUP sur d’autres variables. De plus, les valeurs textes seront alignées à gauche et les valeurs numériques seront alignées à droite.
Mon choix est donc de convertir toutes mes variables à afficher en texte avant et de n’utiliser PROC REPORT que comme un outil de publication. Vous pouvez, de plus, explicitement indiquer le mode DISPLAY dans les instructions DEFINE.
4. Trier les données et ne pas afficher certaines colonnes : en plus des affichages par défaut DISPLAY et ANALYSIS, vous avez l’affichage ORDER. Il est vivement conseillé de noter explicitement l’option ORDER= (formated, data, freq ou internal) car la valeur par défaut risque d’évoluer dans les prochaines versions de SAS. On peut également utiliser le mot-clé DESCENDING pour un tri par ordre décroissant.
Il est souvent plus facile de trier les données si elles sont numériques. Par exemple, imaginez que vous vouliez trier vos données par pays avec en premier des pays d’Europe par ordre alphabétique (Allemagne, France, Royaume-Uni) puis des pays d’Asie par ordre alphabétique (Indonésie, Malaisie, Singapour, Thaïlande). Vous pouvez créer un format numérique avec des valeurs allant de 1 à 7 (1 pour Allemagne, 7 pour Thaïlande).
Pour être cohérent avec mon propos précédent, je vous conseille d’avoir deux variables :
-
d’un côté la variable numérique qui sert pour le tri mais que ne sera pas affichées. Pour cela, il y a l’option NOPRINT de l’instruction DEFINE ;
-
et de l’autre, la variable texte créée préalablement à partir de la variable numérique et du format avec une fonction PUT.
5. Grouper les données et créer des breaks : imaginez que vous ayez plusieurs patients du même pays. Vous aurez autant de fois le nom de pays qu’il y a de patients. Pour alléger le tableau, vous pouvez n’afficher le pays que la première fois. Au lieu de DISPLAY, ANALYSIS, ORDER, etc. vous utilisez alors l’option GROUP dans l’instruction DEFINE.
Notez que toutes les colonnes à gauche devront donc être également groupées.
Il est possible d’utiliser ORDER=… avec GROUP comme pour l’option ORDER.
Un des avantages de GROUP est de définir entre les groupes des séparations. Pour cela, il y l’instruction BREAK AFTER appelle la variable groupée en question. Le type de séparation est défini par l’option. SKIP par exemple permet de sauter une ligne entre les groupes. Mais cette instruction ne fonctionne pas avec ODS RTF. Il faut alors utiliser la syntaxe COMPUTE/ENDCOMP.
proc report data=result_pat nowd;
column pays pays_txt patient_id cnt pct;
define pays / group order=data noprint;
define pays_txt / group ‘Pays’;
define patient_id / display ‘ID’;
define cnt / display ‘N’;
define pct / display ‘%’;
*break after pays / skip;
compute before;
line ‘ ‘;
endcomp;
compute after pays_num;
line ‘ ‘;
endcomp;
run;
6. Les faiblesses de l’instruction ACROSS : imaginez que vous ayez les fréquences et pourcentages pour deux drogues. Cela vous donne 4 colonnes dans votre tableau finale. Mais, dans votre tableau d’origine, vous avez 3 colonnes : le type de drogue, les fréquences et les pourcentages. L’instruction ACROSS permet de « transposer » l’information. Mais si, en plus, vous voulez rajouter une colonne à droite, vous rencontrerez de réelles difficultés.
Comme précédemment, je choisi d’agencer mes données comme il me convient avant la procédure. Je n’utilise PROC REPORT que pour l’affichage. Cela implique souvent l’usage d’un PROC TRANSPOSE et d’un MERGE (where=() rename=()).
proc sort data=result_drug;
by pays;
run;
proc transpose data = result_drug
out = result_drug_across
prefix = drug_;
by pays;
var cnt pct;
id drug;
run;
data result_drug_across (drop=_NAME_);
merge result_drug_across
(where=(lowcase(_name_)=‘cnt’)
rename=(drug_1=cnt_1 drug_2=cnt2))
result_drug_across
(where=(lowcase(_name_)=‘pct’)
rename=(drug_1=pct_1 drug_2=pct2));
by pays;
run;
Pour une information plus détaillées sur DISPLAY, ANALYSIS, GROUP, ORDER, ACROSS vous trouverez la page « Concept: REPORT procedure ». Notez que je n’ai pas parlé de COMPUTED, dans la même veine que GROUP, DISPLAY, ACROSS, ANALYSIS, mais que celle-ci permet de faire des calculs simples (sommation, etc).
Conclusion
En conclusion, la procédure REPORT est un outil qui, certes très puissant, peut vite devenir très compliqué. De mon expérience, il apparaît plus judicieux de restreindre l’usage de PROC REPORT à la diffusion de résultats préalablement agencés en triant les données avec des variables numériques non affichées et ne montrant que les variables textes.
Pour plus de détails sur la procédure REPORT, vous pouvez consulter le prochain article intitulé « 6 subtilités de PROC REPORT » et le chapitre PROC REPORT de la documentation en ligne.
Annexe:
data result_pat;
length pays_txt $10;
input pays pays_txt $ patient_id cnt pct;
datalines;
1 Maroc 1 10 20
1 Maroc 2 25 50
1 Maroc 3 15 30
2 Luxembourg 1 18 36
2 Luxembourg 2 32 64
3 Canada 1 5 100
;
run;
data result_drug;
input pays drug cnt pct;
datalines;
1 1 10 20
2 1 18 36
1 2 40 80
2 2 32 64
3 1 5 100
;
run;