Publicado el :
Manipulación de Datos CREATION_INTERNE

Búsqueda de coincidencia de valores y recuperación de nombres de variables

Este código también está disponible en: Deutsch English Français
En espera de validación
El script primero genera una tabla que contiene calificaciones. Luego compara una columna objetivo 'rating' con tres columnas de agencias (moodys, s_and_p, fitch). Se presentan varias técnicas: condiciones IF-ELSE clásicas, el uso de la función WHICHC para encontrar el índice de la columna correspondiente, y un método avanzado que combina WHICHC, ARRAY y VNAME para recuperar dinámicamente el nombre de la variable correspondiente. Un paso final advierte sobre el desalineamiento entre el orden de los argumentos de WHICHC y el del ARRAY.
Análisis de datos

Type : CREATION_INTERNE


Los datos se generan directamente en el código a través de instrucciones de asignación y OUTPUT.

1 Bloque de código
DATA STEP Data
Explicación :
Creación de la tabla 'ratings' que contiene un valor objetivo 'rating' y tres columnas de comparación ('moodys', 's_and_p', 'fitch').
¡Copiado!
1DATA ratings;
2 LENGTH rating $4;
3 rating = 'A+';
4 moodys = 'Baa2';
5 s_and_p = 'BBB+';
6 fitch = 'A+';
7 OUTPUT;
8 rating = 'Aa3';
9 moodys = 'Aa3';
10 s_and_p = 'AAA';
11 fitch = 'AA-';
12 OUTPUT;
13 rating = 'c';
14 moodys = 'Aa3';
15 s_and_p = 'AAA';
16 fitch = 'AA-';
17 OUTPUT;
18 rating = 'D-';
19 moodys = 'Aa3';
20 s_and_p = 'D-';
21 fitch = 'D-';
22 OUTPUT;
23RUN;
2 Bloque de código
DATA STEP
Explicación :
Primer método de coincidencia utilizando una estructura condicional IF-ELSE clásica para identificar la columna correspondiente.
¡Copiado!
1DATA ratings_match;
2 SET ratings;
3 LENGTH rating_match $8;
4 
5 IF rating = moodys THEN rating_match = 'moodys';
6 ELSE IF rating = s_and_p THEN rating_match = 's_and_p';
7 ELSE IF rating = fitch THEN rating_match = 'fitch';
8 ELSE rating_match = 'no match';
9RUN;
3 Bloque de código
DATA STEP
Explicación :
Uso de la función WHICHC para devolver el índice (la posición) de la primera variable coincidente en la lista proporcionada.
¡Copiado!
1DATA ratings_match;
2 SET ratings;
3 /* WHICHC talar om variabelnumret man fr trff p, baserat p ordningen
4 man raddar upp variablerna i p samma stt som COALESCEC.
5 Finns bara trff i en variabel spelar ordningen ingen roll.
6 Prioordning (i de fall man fr trff p flera):
7 1. Moodys
8 2. S&P
9 3. Fitch */
10 variable_match_number = whichc(rating, moodys, s_and_p, fitch);
11RUN;
4 Bloque de código
DATA STEP
Explicación :
Combinación de un ARRAY, la función WHICHC y la función VNAME. El índice devuelto por WHICHC se utiliza para acceder al elemento de la matriz, y VNAME recupera el nombre de la variable fuente.
¡Copiado!
1DATA ratings_match;
2 SET ratings;
3 LENGTH rating_match $8;
4 /* Array fr att peka p de tre variablerna med vrden,
5 mste ha samma ordning som WHICHC */
6 array rating_agency [3] moodys s_and_p fitch;
7
8 variable_match_number = whichc(rating, moodys, s_and_p, fitch);
9
10 /* Fr man trff i ngon variabel g vidare och plocka fram namnet p variabeln */
11 IF variable_match_number THEN rating_match = vname(rating_agency[variable_match_number]);
12 ELSE rating_match = 'no match';
13RUN;
5 Bloque de código
DATA STEP
Explicación :
Demostración de un caso de error lógico: el orden de las variables en WHICHC difiere del orden en el ARRAY, lo que lleva a recuperar un nombre de variable incorrecto a través de VNAME.
¡Copiado!
1/* ndrar ordningen p WHICHC och inte arrayen, blir helt tokigt.
2 r det lnga listor kan man med frdel speca ordningen i en
3 makrovariabel s man bara gr det 1 gng. */
4DATA ratings_match_error;
5 SET ratings;
6 LENGTH rating_match $8;
7 array rating_agency [3] moodys s_and_p fitch;
8
9 variable_match_number = whichc(rating, s_and_p, fitch, moodys);
10
11 IF variable_match_number THEN rating_match = vname(rating_agency[variable_match_number]);
12 ELSE rating_match = 'no match';
13RUN;
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.