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').
Explicación : Primer método de coincidencia utilizando una estructura condicional IF-ELSE clásica para identificar la columna correspondiente.
¡Copiado!
data ratings_match;
set ratings;
length rating_match $8;
if rating = moodys then rating_match = 'moodys';
else if rating = s_and_p then rating_match = 's_and_p';
else if rating = fitch then rating_match = 'fitch';
else rating_match = 'no match';
run;
1
DATA ratings_match;
2
SET ratings;
3
LENGTH rating_match $8;
4
5
IF rating = moodys THEN rating_match = 'moodys';
6
ELSEIF rating = s_and_p THEN rating_match = 's_and_p';
7
ELSEIF rating = fitch THEN rating_match = 'fitch';
8
ELSE rating_match = 'no match';
9
RUN;
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!
data ratings_match;
set ratings;
/* WHICHC talar om variabelnumret man fr trff p, baserat p ordningen
man raddar upp variablerna i p samma stt som COALESCEC.
Finns bara trff i en variabel spelar ordningen ingen roll.
Prioordning (i de fall man fr trff p flera):
1. Moodys
2. S&P
3. Fitch */
variable_match_number = whichc(rating, moodys, s_and_p, fitch);
run;
1
DATA 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.
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!
data ratings_match;
set ratings;
length rating_match $8;
/* Array fr att peka p de tre variablerna med vrden,
mste ha samma ordning som WHICHC */
array rating_agency [3] moodys s_and_p fitch;
variable_match_number = whichc(rating, moodys, s_and_p, fitch);
/* Fr man trff i ngon variabel g vidare och plocka fram namnet p variabeln */
if variable_match_number then rating_match = vname(rating_agency[variable_match_number]);
else rating_match = 'no match';
run;
1
DATA ratings_match;
2
SET ratings;
3
LENGTH rating_match $8;
4
/* Array fr att peka p de tre variablerna med vrden,
/* 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';
13
RUN;
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!
/* ndrar ordningen p WHICHC och inte arrayen, blir helt tokigt.
r det lnga listor kan man med frdel speca ordningen i en
makrovariabel s man bara gr det 1 gng. */
data ratings_match_error;
set ratings;
length rating_match $8;
array rating_agency [3] moodys s_and_p fitch;
variable_match_number = whichc(rating, s_and_p, fitch, moodys);
if variable_match_number then rating_match = vname(rating_agency[variable_match_number]);
else rating_match = 'no match';
run;
1
/* ndrar ordningen p WHICHC och inte arrayen, blir helt tokigt.
2
r det lnga listor kan man med frdel speca ordningen i en
IF variable_match_number THEN rating_match = vname(rating_agency[variable_match_number]);
12
ELSE rating_match = 'no match';
13
RUN;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.