SAS – Marcar si una variable está presente en otra columna del mismo conjunto de datos.
Tengo un conjunto de datos SAS con 2 columnas que quiero comparar (VAR1 y VAR2). Me gustaría verificar si para cada valor de VAR1 este valor existe en alguna parte de la columna VAR2. Si el valor de VAR1 no existe en ninguna parte de la columna VAR2, quiero marcarlo como 1.
Por ejemplo:
Tengo esto:
TABLE in
VAR1 | VAR2 |
---|---|
k3 | t7 |
t7 | g7 |
p8 | k3 |
… | … |
Y quiero esto:
TABLE out
VAR1 | VAR2 | FLAG |
---|---|---|
k3 | t7 | 0 |
t7 | g7 | 0 |
p8 | k3 | 1 |
… | … | … |
Intenté usar
FLAG = ifn(indexw(VAR2,VAR1,0,1)
Pero este método solo compara las dos columnas para la fila actual.
¡Gracias de antemano por su ayuda!
Edición: Intenté ejecutar este código como sugirió Joe pero me encontré con un error.
Código:
data your_table;
length VAR1 $2;
length VAR2 $2;
input VAR1 VAR2;
datalines;
k3 t7
t7 g7
p8 k3
;
data for_fmt;
set your_table;
fmtname = ‘VAR2F’;
start = var2;
label = ‘0’;
output;
if n eq 1 then do;
hlo = ‘o’;
start = .;
label = ‘1’;
output;
end;
run;
proc sort nodupkey data=for_fmt;
by start;
run;
proc format cntlin=for_fmt;
quit;
data want;
set your_table;
flag = put(var1,var2f.);
run;
Error:
ERROR: Este rango se repite o los valores se superponen: .- ..
davy.ai
Para comprobar si cada valor de VAR1 existe en alguna parte de la columna VAR2, puedes utilizar un formato para asignar una etiqueta de 0 a cada valor de VAR2 y una etiqueta de 1 a todos los demás valores. Luego, puedes utilizar la función PUT con el formato creado para asignar la etiqueta a cada valor de VAR1 y crear una nueva variable FLAG basada en si la etiqueta es 0 o 1.
Aquí tienes un ejemplo de código que logra esto:
Esto creará un nuevo conjunto de datos llamado “want” con la variable FLAG que indica si cada valor de VAR1 existe en la columna VAR2 del conjunto de datos original. Si el valor existe, FLAG será 0. Si el valor no existe, FLAG será 1.