Para cambiar el orden de las variables en un conjunto de datos SAS hemos de emplear RETAIN antes de SET. Este truco es la respuesta a una duda planteada en el blog. Un vistazo rápido al ejemplo entenderemos la sintaxis:
data datos;
do i=1 to 20;
importe1 = ranuni(8)*100;
importe2 = ranuni(3)*100;
importe3 = ranuni(1)*100;
id = put(i,z5.);
output;
end;
drop i;
run;
data datos_reordenados;
retain id importe3;
set datos;
run;
Como vemos RETAIN nos permite reordenar las variables del dataset independientemente del tipo de variable que estemos manejando. También podríamos emplear algún otro tipo de sentencia, pero es recomendable usar RETAIN, como vemos no es necesario poner el total de las variables. Saludos.
Gracias por la ayuda!!! yo fuí quién pidió que por favor me ayuden con este incoveniente de ordenar variables con data step, antes lo hacía con PROC SQL, pero con retain mucho mejor!!.
Tengo otra duda como puedo sacar de una variable o columna de datos la suma de todos los datos con una función implementada en data step.
Gracias amigo!!!
Hola Marcelo,
Mira esta entrada: https://analisisydecision.es/monografico-datos-agrupados-en-sas/
Al final quieres crear sumarizaciones en tu dataset. Saludos.
Hola,
Me gusta mucho este blog, me a ayudado en muchos de mis conocimientos de SAS y de uso diario en mi oficina.
Mi consulta es la siguiente:
Tengo una tabla con una columna con las fechas diarias y otra columna con las ventas del día.
Quisiera hacer un macro que cuando yo consulte una fecha y este fecha no existe me busque la fecha anterior más próxima y me indique las ventas de ese día.
Gracias por su ayuda.
Muy útil, siempre usaba después un proc sql con un select para ordenar las variables.
gracias¡
hola,
quiero crear una macro donde encierro una cadena de variables con el orden que deben tener en el dataset final:
%macro orden;
%let var_= v_2 v_6 v_0 v_9 v_4 v_8 v_1
;
%mend;
data salida;
retain %orden;
set entrada;
run;
Tal como lo hago, el retain no funciona, es un problema de quotation marks?
Gracias!!!
Hazlo así:
%let var_=….
data salida;
retain &var_.;
set entrada;
…
Gracias Raúl me ha funcionado!!!
Buenos días,
En línea con la función de retain, me gustaría saber si alguien podría echarme un cable ya que no acabo de entender la siguiente parte de código:
data ZZZ_1;
set ZZZ;
by POD_ID
POD_MAC
PK_SA;
retain retiene;
if first.POD_ID and PK_SA <= S_GAR and S_GAR ^=0 then do
IMP_GAR =PK_SA;
R_MIT= PK_SA – IMP_GAR;
retiene=S_GAR- IMP_GAR;
end;
run;
Si alguien pudiese poner un ejemplo con ésta función de retain que fuese muy visual estaría completamente agradecido.
Muchas gracias de antemano.
Saludos!
Mirate esto:
https://analisisydecision.es/monografico-datos-agrupados-en-sas/