Comparando valores entre filas y luego eliminando los valores duplicados en SAS.
Tengo un conjunto de datos que tiene ciertas variables, ahora tengo que comparar esas variables entre filas para encontrar los duplicados, pero tiene algunas solicitudes adicionales.
- Si para la misma acctnum y testid
- Si el finalamt coincide con el finalamt de la siguiente fila y el finalamtagregado coincide con el finalamtagregado de la siguiente fila, debemos considerarlos como duplicados y eliminar solo el caso donde la tran_date esté en blanco.
-
También, si estamos eliminando la fila duplicada con la trandate en blanco, los datos actual_ amt de esa fila deben conservarse como una nueva variable actamtextra en la fila que no se eliminó.
He intentado múltiples escenarios usando lag y retain, pero los datos simplemente no están llegando correctamente. Agradeceré cualquier ayuda.
Los datos que quiero son:
data want;
input acct_num test_id tran_date:anydtdte. actual_amt final_amt final_amt_added act_amt_extra;
format tran_date date9.;
DATALINES;
55203610 2542 12-jan-20 30 45 45
16124130 8062 14-dec-19 8 78 78 56
80479512 2062 19-mar-19 32 32 32
70321918 2062 20-dec-19 1 93 54
17312410 6712 15-jun-18 0 90 90 45
74623123 2092 17-aug-18 34 87 87
24245321 2082 22-jan-17 22 56 67
;
run;
Los datos de muestra son:
DATA work.sample;
INPUT acct_num test_id tran_date:anydtdte. actual_amt final_amt final_amt_added ;
format tran_date date9.;
DATALINES;
55203610 2542 12-jan-20 30 45 45
16124130 8062 . 56 78 78
16124130 8062 14-dec-19 8 78 78
80479512 2062 19-mar-19 32 32 32
70321918 2062 20-dec-19 1 93 54
17312410 6712 . 45 90 90
17312410 6712 15-jun-18 0 90 90
74623123 2092 17-aug-18 34 87 87
24245321 2082 22-jan-17 22 56 67
;
run;
davy.ai
Para comparar las variables entre filas y encontrar los duplicados con las condiciones dadas, puede utilizar técnicas avanzadas de SAS en el paso de datos como
retain
,lag
y declaracionesif-then
. Aquí hay una forma de lograr la salida deseada:En este código,
retain
se usa para almacenar los valores de la fila anterior y se utilizan declaracionesif-then
para comparar las variables entre filas y aplicar las condiciones deseadas. La funciónmissing()
se utiliza para verificar si la variabletran_date
está en blanco. La variableact_amt_extra
recibe el valor deactual_amt
de la fila duplicada. La instruccióncontinue
se utiliza para saltar a la siguiente iteración sin emitir la fila actual. Finalmente, la instrucciónoutput
se utiliza para emitir la fila actual si no es un duplicado, y los valores de la fila actual se almacenan en variablesprev_
para usarlos en la próxima iteración.