Publié le :
Macro CREATION_INTERNE

Analyse de fréquence sur plusieurs tables avec une macro

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script commence par créer deux jeux de données distincts, 'males' et 'females', en utilisant des étapes DATA avec des données en ligne (datalines). Il exécute ensuite la procédure PROC FREQ sur chaque table pour calculer la fréquence des âges par sexe. La partie principale du code est la définition d'une macro '%multfreq'. Cette macro est conçue pour automatiser l'exécution de PROC FREQ sur une liste de jeux de données et pour une liste de variables spécifiées, offrant ainsi une grande flexibilité pour des analyses répétitives. Enfin, la macro est appelée pour traiter les deux tables créées précédemment.
Analyse des données

Type : CREATION_INTERNE


Les données pour les tables 'males' et 'females' sont créées directement dans le script à l'aide d'instructions 'datalines' au sein de deux étapes DATA distinctes. Aucune source de données externe n'est nécessaire.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc crée la table 'males' à partir de données internes fournies via 'datalines'. Les données contiennent des informations sur des individus de sexe masculin.
Copié !
1DATA males;
2INFILE DATALINES dlm='|' dsd missover;
3INPUT NAME : $8. SEX : $1. AGE : best32. HEIGHT : best32. WEIGHT : best32.;
4label ;
5FORMAT ;
6datalines4;
7Alfred|M|14|69|112.5
8Henry|M|14|63.5|102.5
9James|M|12|57.3|83
10Jeffrey|M|13|62.5|84
11John|M|12|59|99.5
12Philip|M|16|72|150
13Robert|M|12|64.8|128
14Ronald|M|15|67|133
15Thomas|M|11|57.5|85
16William|M|15|66.5|112
17;;;;
18RUN;
2 Bloc de code
DATA STEP Data
Explication :
Ce bloc crée la table 'females' à partir de données internes fournies via 'datalines'. Les données contiennent des informations sur des individus de sexe féminin.
Copié !
1DATA females;
2INFILE DATALINES dlm='|' dsd missover;
3INPUT NAME : $8. SEX : $1. AGE : best32. HEIGHT : best32. WEIGHT : best32.;
4label ;
5FORMAT ;
6datalines4;
7Alice|F|13|56.5|84
8Barbara|F|13|65.3|98
9Carol|F|14|62.8|102.5
10Jane|F|12|59.8|84.5
11Janet|F|15|62.5|112.5
12Joyce|F|11|51.3|50.5
13Judy|F|14|64.3|90
14Louise|F|12|56.3|77
15Mary|F|15|66.5|112
16;;;;
17RUN;
3 Bloc de code
PROC FREQ
Explication :
Ces deux procédures exécutent une analyse de fréquence sur les tables 'males' et 'females' respectivement. Elles calculent la distribution croisée des variables 'sex' et 'age' et stockent les résultats dans les tables 'u01' et 'u02'.
Copié !
1PROC FREQ DATA=males ;
2 tables sex*age /list missing out=u01;
3 where 1=1;
4RUN;
5
6PROC FREQ DATA=females ;
7 tables sex*age /list missing out=u02;
8 where 1=1;
9RUN;
4 Bloc de code
MACRO
Explication :
Définition de la macro '%multfreq'. Elle prend en paramètres une liste de jeux de données ('dsnlist'), une liste de tables de fréquence à générer ('tables') et une condition 'where'. La macro boucle sur chaque jeu de données et exécute PROC FREQ pour chaque table de fréquence demandée, créant un jeu de données de sortie pour chacune.
Copié !
1%macro multfreq(dsnlist=%str( ),tables=%str( ),where=%str());
2
3%local _dsncount _dsni _tablesi _tablescount _currentdsn _currentable;
4
5%let _dsncount=%sysfunc(countw(&dsnlist,%str( )));
6%let _tablescount=%sysfunc(countw(&tables,%str( )));
7
8%DO _dsni=1 %to &_dsncount.;
9 %let _currentdsn=%scan(&dsnlist.,&_dsni,%str( ));
10 title "&_currentdsn";
11
12 PROC FREQ DATA= &_currentdsn ;
13 %DO _tablesi=1 %to &_tablescount.;
14 %let _currenttable=%scan(&tables.,&_tablesi,%str( ));
15 tables &_currenttable. /list missing out=%scan(&_currentdsn.,-1,%str(.))_freq0&_tablesi.;
16 %END;
17 &where.;
18 RUN;
19
20%END;
21%mend multfreq;
5 Bloc de code
MACRO
Explication :
Appel de la macro '%multfreq' pour exécuter l'analyse de fréquence sur les tables 'males' et 'females'. La table de fréquence demandée est la distribution croisée de 'sex' et 'age'.
Copié !
1%multfreq(
2dsnlist=%str(males females)
3,tables=%str(sex*age)
4,where=%str()
5);
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.