Este artículo explora cómo realizar esta transformación, calcular sumas de manera robusta y aplicar una lógica de ordenamiento compleja.
El Escenario
Imaginemos una tabla de origen llamada Population1 que contiene datos demográficos por nación y por género:
El objetivo es obtener una tabla Population2 estructurada de la siguiente manera, con una columna para el total y columnas distintas para cada género:
Paso 1: La Transposición de los Datos
Aunque técnicamente es posible utilizar un paso DATA complejo con instrucciones RETAIN y condiciones, el método más eficaz y menos propenso a errores se basa en el procedimiento TRANSPOSE.
Antes de transponer, es imperativo ordenar los datos por la variable de agrupación (aquí, la Nación).
/* 1. Tri préalable indispensable */
proc sort data = population1;
by Nation;
run;
/* 2. Transposition */
proc transpose data = population1 out = temp_pop(drop=_name_);
by Nation; /* La ligne devient unique par Nation */
id Gender; /* Les valeurs de Gender deviennent les noms de colonnes */
var Number; /* Ce sont ces chiffres qui remplissent les colonnes */
run;
1
/* 1. Tri préalable indispensable */
2
PROC SORTDATA = population1;
3
BY Nation;
4
RUN;
5
6
/* 2. Transposition */
7
PROC TRANSPOSEDATA = population1 out = temp_pop(drop=_name_);
8
BY Nation; /* La ligne devient unique par Nation */
9
id Gender; /* Les valeurs de Gender deviennent les noms de colonnes */
10
var Number; /* Ce sont ces chiffres qui remplissent les colonnes */
11
RUN;
En esta etapa, la tabla contiene las columnas Nación, Hombres y Mujeres.
Paso 2: Cálculo del Total y Gestión de los Valores Faltantes
Si una de las dos variables (Men o Women) contiene un valor faltante (missing value), el resultado de la operación también será faltante.
El enfoque recomendado
Population = sum(Men, Women);
1
Population = sum(Men, Women);
La función SUM() ignora los valores faltantes (tratándolos como ceros). Si se tienen datos para hombres pero no para mujeres, el total mostrará de todos modos la cifra de hombres en lugar de un valor nulo, lo que suele ser el comportamiento deseado.
Supongamos ahora una restricción de ordenamiento específica:
Ordenar las naciones por Población decreciente.
Excepción: Una nación específica (ej: "MyCountry") debe aparecer imperativamente en última posición, independientemente de su cifra de población.
Para lograr esto sin modificar los datos mostrados, el truco consiste en crear una variable de ordenamiento temporal (o "rank").
La lógica
Asignamos a esta variable de ordenamiento el valor de la población para todas las naciones, excepto para la excepción, a la que asignamos un valor artificialmente bajo (por ejemplo, -1).
data population2;
set temp_pop;
/* Calcul de la somme robuste */
Population = sum(Men, Women);
/* Création de la variable de tri temporaire */
if Nation = "MyCountry" then SortKey = -1;
else SortKey = Population;
run;
/* Tri final sur la clé temporaire */
proc sort data = population2;
by descending SortKey;
run;
/* Nettoyage final : on retire la clé de tri */
data population2;
set population2(drop=SortKey);
run;
1
DATA population2;
2
SET temp_pop;
3
4
/* Calcul de la somme robuste */
5
Population = sum(Men, Women);
6
7
/* Création de la variable de tri temporaire */
8
IF Nation = "MyCountry"THEN SortKey = -1;
9
ELSE SortKey = Population;
10
RUN;
11
12
/* Tri final sur la clé temporaire */
13
PROC SORTDATA = population2;
14
BY descending SortKey;
15
RUN;
16
17
/* Nettoyage final : on retire la clé de tri */
18
DATA population2;
19
SET population2(drop=SortKey);
20
RUN;
Para transformar eficazmente una tabla:
Utilice PROC SORT y luego PROC TRANSPOSE con una instrucción ID para pivotar las filas en columnas.
Priorice la función SUM() sobre el operador + para evitar la propagación de valores faltantes.
Para ordenamientos complejos (como forzar una fila al final de la tabla), cree una variable técnica temporal, ordene por ella y luego elimínela.
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
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.