Publicado el :
Macro CREATION_INTERNE

Análisis de frecuencia en varias tablas con una macro

Este código también está disponible en: Deutsch English Français
En espera de validación
El script comienza creando dos conjuntos de datos distintos, 'males' y 'females', utilizando pasos DATA con datos en línea (datalines). Luego ejecuta el procedimiento PROC FREQ en cada tabla para calcular la frecuencia de las edades por sexo. La parte principal del código es la definición de una macro '%multfreq'. Esta macro está diseñada para automatizar la ejecución de PROC FREQ en una lista de conjuntos de datos y para una lista de variables especificadas, ofreciendo así una gran flexibilidad para análisis repetitivos. Finalmente, la macro es llamada para procesar las dos tablas creadas anteriormente.
Análisis de datos

Type : CREATION_INTERNE


Los datos para las tablas 'males' y 'females' se crean directamente en el script utilizando instrucciones 'datalines' dentro de dos pasos DATA distintos. No se necesita ninguna fuente de datos externa.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea la tabla 'males' a partir de datos internos proporcionados a través de 'datalines'. Los datos contienen información sobre individuos de sexo masculino.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea la tabla 'females' a partir de datos internos proporcionados a través de 'datalines'. Los datos contienen información sobre individuos de sexo femenino.
¡Copiado!
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 Bloque de código
PROC FREQ
Explicación :
Estas dos rutinas realizan un análisis de frecuencia en las tablas 'males' y 'females' respectivamente. Calculan la distribución cruzada de las variables 'sex' y 'age' y almacenan los resultados en las tablas 'u01' y 'u02'.
¡Copiado!
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 Bloque de código
MACRO
Explicación :
Definición de la macro '%multfreq'. Toma como parámetros una lista de conjuntos de datos ('dsnlist'), una lista de tablas de frecuencia a generar ('tables') y una condición 'where'. La macro itera sobre cada conjunto de datos y ejecuta PROC FREQ para cada tabla de frecuencia solicitada, creando un conjunto de datos de salida para cada una.
¡Copiado!
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 Bloque de código
MACRO
Explicación :
Llamada a la macro '%multfreq' para ejecutar el análisis de frecuencia en las tablas 'males' y 'females'. La tabla de frecuencia solicitada es la distribución cruzada de 'sex' y 'age'.
¡Copiado!
1%multfreq(
2dsnlist=%str(males females)
3,tables=%str(sex*age)
4,where=%str()
5);
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.