Recorriendo varios conjuntos de datos para crear uno único.
Me gustaría crear una macro en SAS que ejecute algún código según algunas configuraciones.
Tengo tres conjuntos de datos, df1
, df2
y df3
, todos ellos guardados en la biblioteca work
.
No es necesario utilizar todos ellos: puede ser que quiera comparar df1
con df2
o solo considerar df3. Mi objetivo es crear un nuevo conjunto de datos con información específica de este/estos conjunto/s de datos. df1
, df2
y df3
tienen las mismas variables pero un número diferente de observaciones.
Por ejemplo:
df1
Nombre Apellido NombreUsuario Puntuación
A. B. mal 24
B. J. ninguno92 54
df2
Nombre Apellido NombreUsuario Puntuación
Jenny B. jben42 25
S. C. btw 34
H. H. hhhg241 64
df3
Nombre Apellido NombreUsuario Puntuación
F. B. gd523 22
H. G.G. df51 34
La lógica de la macro debería ser:
- tomar el primer conjunto de datos;
- tomar el segundo conjunto de datos (si está seleccionado);
- tomar el tercer conjunto de datos (si está seleccionado);
- crear un conjunto de datos con información de los conjuntos de datos seleccionados.
He intentado probar la macro de la siguiente manera:
%macro select_datasets(df1, df2, df3, acción);
%let dataset1=df1;
%let dataset2=df2;
%let dataset3=df3;
%if &dataset1=y and &dataset2=y and &dataset3=y %then %let dataset_list= &dataset1 &dataset2 &dataset3;
%if &acción=1 %then %do; /* crear un conjunto de datos que incluya las observaciones de todos los conjuntos de datos */
%end;
%mend;
%select_datasets(df1=y, df2=y, df3=y, 1);
La macro anterior no devuelve ninguna salida, probablemente significa que hay algunos errores en la lógica y la implementación.
Necesitaría tener un conjunto de datos final.
Nombre Apellido NombreUsuario Puntuación
A. B. mal 24
B. J. ninguno92 54
Jenny B. jben42 25
S. C. btw 34
H. H. hhhg241 64
F. B. gd523 22
H. G.G. df51 34
La macro debería funcionar incluso si hay dos o un conjunto de datos en lugar de 3.
davy.ai
Para lograr la salida deseada, la macro puede actualizarse de la siguiente manera:
En el código de la macro actualizado, las entradas de la macro son
dataset1
,dataset2
, ydataset3
en lugar dedf1
,df2
, ydf3
. Cada parámetrodataset
puede tener un valor dey
on
, dependiendo de si se necesita incluir en el análisis o no. La macro utiliza la condición%if
para verificar si un parámetrodataset
esy
o no. Si un conjunto de datos se incluye en el análisis, la macro lee ese conjunto de datos y crea un conjunto de datos temporal utilizando las declaracionesdata
yset
. Luego, los conjuntos de datos temporales se fusionan para crear el conjunto de datos final utilizando la declaraciónset
. Finalmente, la declaracióndrop
se utiliza para descartar los conjuntos de datos temporales intermedios.Para ejecutar la macro, podemos usar el siguiente código:
Esto creará un conjunto de datos final que incluye información de los tres conjuntos de datos, de la siguiente manera:
Si queremos incluir solo dos conjuntos de datos, podemos ejecutar la macro con los parámetros de
dataset
correspondientes establecidos eny
, de la siguiente manera:Esto creará un conjunto de datos final que incluye información solo de los dos primeros conjuntos de datos:
De manera similar, podemos ejecutar la macro con solo un conjunto de datos, de la siguiente manera:
Esto creará un conjunto de datos final que incluye información solo del primer conjunto de datos:
En general, el código de la macro actualizado nos permite seleccionar dinámicamente conjuntos de datos y crear un conjunto de datos final que incluye información de los conjuntos de datos seleccionados. La macro puede manejar casos en los que hay dos o un conjunto de datos también.