Cette macro automatise le calcul de statistiques (par défaut : n, moyenne, médiane, min, max) via PROC MEANS après un tri des données. Elle gère le formatage des résultats via des paramètres de délimitation. Le code contient des blocs conditionnels pour une sortie horizontale ou verticale (basés sur une variable '&orie' non déclarée en paramètre). Note : Le bloc de code pour l'orientation verticale contient des erreurs de syntaxe manifestes (syntaxe SQL dans un étape DATA). La macro dépend de plusieurs autres macros utilitaires (AHGwords, AHGdatasort, etc.).
Analyse des données
Type : CREATION_INTERNE
La macro travaille sur le jeu de données passé en paramètre (&dsn). Elle génère des tables de sortie (&out).
1 Bloc de code
MACRO
Explication : Initialisation des variables locales et préparation des données. Appel à des macros utilitaires externes (AHGdatasort, AHGwords, AHGgettempname) pour trier les données et parser la liste des statistiques demandées et leurs formats associés.
Copié !
%local statN single %AHGwords(mystat,20)
%AHGwords(myformat,20) %AHGwords(IsStat,20);
%local i sortdsn mystats;
%AHGgettempname(sortdsn);
%AHGdatasort(data = &dsn,out=&sortdsn, by =&bigby &by);
%do i =1 %to %AHGcount(&stats);
%let single=%scan(&stats,&i,%str( ));
%let isStat&i=0;
%if not %index(&single,%str(%22)) %then
%do;
%let isStat&i=1;
%let mystats=&mystats &single ;
%end;
%end;
%put I am fine out=&out;
%AHGsetstatfmt(statfmt=&mystats);
%let statN=%AHGcount(&stats);
%do i=1 %to &statN;
%let single=%scan(&stats,&i,%str( ));
%let mystat&i=%scan(&single,1,&split);
%let myformat&i=%scan(&single,2,&split);
%if %AHGblank(&&myformat&i) and %str(&&isStat&i) %then %let myformat&i=&&&&formatof&&mystat&i;
%if &&isStat&i %then %AHGpm(mystat&i myformat&i);
%end;
%put I am fine 2;
1
%local statN single %AHGwords(mystat,20)
2
%AHGwords(myformat,20) %AHGwords(IsStat,20);
3
%local i sortdsn mystats;
4
5
%AHGgettempname(sortdsn);
6
7
%AHGdatasort(DATA = &dsn,out=&sortdsn, BY =&bigby &BY);
8
%DO i =1 %to %AHGcount(&stats);
9
%let single=%scan(&stats,&i,%str( ));
10
%let isStat&i=0;
11
%IF not %index(&single,%str(%22)) %THEN
12
%DO;
13
%let isStat&i=1;
14
%let mystats=&mystats &single ;
15
%END;
16
%END;
17
18
%put I am fine out=&out;
19
%AHGsetstatfmt(statfmt=&mystats);
20
%let statN=%AHGcount(&stats);
21
22
%DO i=1 %to &statN;
23
%let single=%scan(&stats,&i,%str( ));
24
%let mystat&i=%scan(&single,1,&split);
25
%let myformat&i=%scan(&single,2,&split);
26
%IF %AHGblank(&&myformat&i) and %str(&&isStat&i) %THEN %let myformat&i=&&&&formatof&&mystat&i;
27
%IF &&isStat&i %THEN %AHGpm(mystat&i myformat&i);
28
%END;
29
%put I am fine 2;
2 Bloc de code
PROC MEANS Data
Explication : Calcul des statistiques descriptives demandées à l'aide de la PROC MEANS. Les résultats sont stockés dans la table définie par &out.
Copié !
proc means data=&sortdsn noprint alpha=α;
var &var;
output out=&out
%do i=1 %to &statN;
%if &&isStat&i %then &&mystat&i%str(=)&&mystat&i;
%end;
;
%if not %AHGblank(&bigby&by) %then by &bigby &by;;
run;
1
PROC MEANSDATA=&sortdsn noprint alpha=α;
2
var &var;
3
OUTPUT out=&out
4
%DO i=1 %to &statN;
5
%IF &&isStat&i %THEN &&mystat&i%str(=)&&mystat&i;
6
%END;
7
;
8
%IF not %AHGblank(&bigby&BY) %THENBY &bigby &BY;;
9
RUN;
3 Bloc de code
DATA STEP Data
Explication : Étape de post-traitement pour appliquer des formats conditionnels ou renommer des valeurs de regroupement (by variables) selon le paramètre &byfmts.
Copié !
data &out;
set &out;
%do i=1 %to %AHGcount(&byfmts,dlm=&split);
format ahuigeby $50.;
if %AHGequaltext(input(&by,$100.),"%scan(%scan(&byfmts,&i,&split),1,&split2)")
then ahuigeby="%scan(%scan(&byfmts,&i,&split),2,&split2)";
%end;
run;
1
DATA &out;
2
SET &out;
3
4
%DO i=1 %to %AHGcount(&byfmts,dlm=&split);
5
FORMAT ahuigeby $50.;
6
IF %AHGequaltext(INPUT(&BY,$100.),"%scan(%scan(&byfmts,&i,&split),1,&split2)")
7
THEN ahuigeby="%scan(%scan(&byfmts,&i,&split),2,&split2)";
8
%END;
9
RUN;
4 Bloc de code
PROC SQL Data
Explication : Si la variable (non déclarée) &orie est égale à 'hori', une PROC SQL formate les statistiques en utilisant la fonction PUT avec les formats identifiés précédemment.
Copié !
%if &orie=hori %then
%do;
proc sql;
%if not &print %then create table &out as ;
select
/* %if not %AHGblank(&bigby) %then %str(&bigby,);*/
ahuigeby/* %sysfunc(tranwrd(&by,%str( ),%str(,)))*/
%do i=1 %to %AHGcount(&stats);
%if &&isStat&i %then ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
%else ,&&mystat&i;
%end;
from &out
;quit;
%end;
1
%IF &orie=hori %THEN
2
%DO;
3
PROC SQL;
4
%IF not &PRINT %THEN create TABLE &out as ;
5
select
6
/* %if not %AHGblank(&bigby) %then %str(&bigby,);*/
%IF &&isStat&i %THEN ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
10
%ELSE ,&&mystat&i;
11
%END;
12
from &out
13
;QUIT;
14
15
%END;
5 Bloc de code
DATA STEP Data
Explication : Si &orie est 'vert', tentative de création d'une table 'ahuigeprint'. ATTENTION : Ce bloc contient du code invalide. Il mélange la syntaxe d'un DATA STEP ('set &out') avec des clauses SQL ('put(...) as ...', 'from &out'). Ce code échouera à l'exécution.
Copié !
%if &orie=vert %then
%do;
data ahuigeprint;
set &out ;
%do i=1 %to %AHGcount(&stats);
%if &&isStat&i %then ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
%else ,&&mystat&i;
%end;
from &out
;quit;
%end;
1
%IF &orie=vert %THEN
2
%DO;
3
4
DATA ahuigeprint;
5
SET &out ;
6
%DO i=1 %to %AHGcount(&stats);
7
%IF &&isStat&i %THEN ,put(&&mystat&i, &&myformat&i) as &&mystat&i ;
8
%ELSE ,&&mystat&i;
9
%END;
10
from &out
11
;QUIT;
12
13
%END;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.