En la gestión de datos clínicos o de marketing, es común encontrar tablas donde la información está dispersa en varias columnas. Una tarea habitual es identificar qué columnas contienen datos para un individuo determinado y luego crear una lista resumida de estos nombres de columna en una única variable.
Este artículo explica cómo usar las funciones ARRAY, VNAME y CATX en SAS© para transformar una estructura "ancha" en una lista descriptiva concatenada.
Imaginemos un conjunto de datos que contiene identificadores de pacientes y varias columnas correspondientes a diferentes estudios (Study1ID, Study2ID, etc.). Si un paciente está inscrito en un estudio, la columna contiene un ID. De lo contrario, está vacía o ausente.
Datos de entrada:
| CurrentStudy | Study1ID | Study2ID | Study3ID | Study4ID |
| 001 | 180 | 780 | . | 560 |
| 002 | . | 790 | . | 520 |
| 003 | . | . | . | 231 |
Resultado deseado:
Queremos crear una nueva variable (por ejemplo, Other_enrolled_studies) que enumere los nombres de los estudios en los que participa el paciente, separados por una coma.
| CurrentStudy | Other_enrolled_studies |
| 001 | Study1ID, Study2ID, Study4ID |
| 002 | Study2ID, Study4ID |
| 003 | Study4ID |
La clave para resolver este problema reside en la función VNAME(). A diferencia de la mayoría de las funciones de SAS© que procesan el valor de una variable, VNAME devuelve el nombre de la variable misma.
Combinada con un bucle sobre una matriz (ARRAY), esta función permite recorrer dinámicamente las columnas.
Método 1: El enfoque iterativo (Recomendado)
Este método es el más directo y, a menudo, el más eficaz. Consiste en:
Declarar un ARRAY que agrupe todas las columnas de interés.
Iterar sobre esta matriz.
Verificar si el valor no está ausente.
Si existe un valor, concatenar el nombre de la variable (a través de VNAME) a nuestra variable de resultado.
Puntos clave del código:
study: : Los dos puntos son un carácter comodín (wildcard) que selecciona todas las variables que comienzan con el prefijo "Study".
catx(", ", ...) : Esta función es ideal porque maneja automáticamente los separadores. No agrega una coma al principio de la cadena si está vacía y elimina los espacios innecesarios.
Método 2: El enfoque de matrices paralelas
Otra forma de hacerlo es usar dos matrices: una para los valores numéricos y otra para almacenar los nombres como caracteres, y luego concatenar todo al final.
Nota sobre el rendimiento
Aunque el segundo método funciona, puede ser menos eficiente en conjuntos de datos muy grandes si la función catx se coloca dentro del bucle. De hecho, concatenar la totalidad de una lista en cada iteración es una operación innecesariamente costosa.
Si se utiliza el enfoque iterativo (Método 1), el uso de catx línea por línea a medida que se cumplen las condiciones sigue siendo muy eficiente, ya que solo se construye una cadena de caracteres de forma progresiva.
El uso conjunto de ARRAY y VNAME ofrece una enorme flexibilidad para la limpieza de datos ("Data Munging"). Esto permite transformar la estructura de los metadatos (los nombres de las columnas) en datos utilizables (valores de celda), lo que es particularmente útil para generar informes resumidos automatizados.