/ / Variable de fecha de incremento - fecha, sas, incremento

Variable de fecha de incremento - fecha, sas, incremento

Tengo un conjunto de datos SAS, en el que debo agregar una fechavariable, comenzando con una fecha determinada (ej .: 10 de julio de 2014). Para cada observación, la fecha debe aumentar en un día. No puedo averiguar cómo aumentar la fecha. Cuando lo intento, obtengo la misma fecha para todas las observaciones.

Respuestas

2 para la respuesta № 1

Bienvenido a Stack Overflow! Asumamos que su conjunto de datos se ve así:

Tener

Obs Var1
1   Mazda
2   Ford
3   BMW

Querer

Obs Date        Var1
1   01JAN2015   Mazda
2   02JAN2015   Ford
3   03JAN2015   BMW

Puedes usar un Suma de declaración con un SAS Fecha Literal para lograr este objetivo.

data want;
format Date date9. /* Makes date the first var, looks prettier */
set have;
if(_N_ = 1) then Date = "31DEC2014"d; /* Set initial value */
Date+1; /* Increment SAS date value by 1 day for each day */
run;

Si no ha utilizado la variable automática. norte antes, es un contador de iteración por cada vez que SAS va desde la parte superior del paso de datos hasta la parte inferior.

La razón probable por la que está viendo la misma fecha para cada día es porque no está reteniendo el valor que desea incrementar. Considere el siguiente programa de ejemplo:

data WontWork;
set have;

Add_Me = 1;

/* Do loop just simulates dataset iterations */
do i = 1 to 10;
Add_Me = Add_Me + 1;
output;
end;

drop i;
run;

Explicación

Cada vez que SAS se ejecuta a través de una iteración de lapaso de datos, el vector de datos de programa (PDV) restablece todas las variables no automáticas a faltantes. Para solucionar este problema, debe usar una declaración de retención y luego incrementar la variable, o usar una declaración de suma para hacer el trabajo de retener y resumir la variable. Las declaraciones de retención / suma le dicen a SAS que recuerde el último valor de una variable para que no se restablezca a falta cuando se itera a través del paso de datos. Una propiedad única de la declaración de retención es que puede establecer un valor inicial. De forma predeterminada, la instrucción de retención inicializará la variable como faltante. La declaración de suma siempre inicializará una variable como faltante.

data works;
retain Add_Me 0;

/* Do loop just simulates dataset iterations */
do i = 1 to 10;
Add_Me = sum(Add_Me, 1);
output;
end;

drop i;
run;

O

data works2;

/* Do loop just simulates dataset iterations */
do i = 1 to 10;
Add_Me+1;
output;
end;

drop i;
run;

Tenga en cuenta que la declaración de suma realiza estos dos pasos y también controla los valores faltantes. Piense en ello como un atajo.

Espero que esto haya resuelto tu problema, y ​​nuevamente, ¡bienvenido a Stack Overflow!