Publié le :
Statistique CREATION_INTERNE

Macro AHGstats_vertical - Calcul et formatage de statistiques

Ce code est également disponible en : Deutsch English Español
En attente de validation
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é !
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é !
1PROC MEANS DATA=&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) %THEN BY &bigby &BY;;
9RUN;
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é !
1DATA &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;
9RUN;
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é !
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,);*/
7 ahuigeby/* %sysfunc(tranwrd(&by,%str( ),%str(,)))*/
8 %DO i=1 %to %AHGcount(&stats);
9 %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é !
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.