Condition where pour comparer sisi une date (format datetime20.) d'une table A (want) se trouve dans une plage de +/- 5 jours par rapport à une date (format datetime20.) de la table B (want 2).
J'ai deux ensembles de données, want et want2, où je génère aléatoirement 20 dates au format datetime20., mais je n'arrive pas à créer la condition WHERE qui permet de sélectionner les dates communes, mon code ne seleccioné pas aucun date.
Pourriez vous m'aider svp?
Below your code with some tweaks. Main issue was that in intck() you used 'day' instead of 'dtday' as date directive together with a SAS datetime value.
/* Crear tabla con 20 fechas adicionales */
data want;
/* Definir la fecha inicial */
chardate = "23/01/2023";
format numdate date9. numdatetime datetime20.;
/* Generar 20 fechas adicionales */
do i = 0 to 10;
/* Incrementar la fecha inicial para obtener fechas adicionales */
numdate = intnx('day', input(chardate, ddmmyy10.), i); /* Incrementar en un día */
numdatetime = dhms(numdate, 0, 0, 0);
output;
end;
run;
data want2;
/* Definir la fecha inicial */
chardate = "25/01/2023";
format numdate date9. numdatetime2 datetime20.;
/* Generar 20 fechas adicionales */
do i = 0 to 10;
/* Incrementar la fecha inicial para obtener fechas adicionales */
numdate = intnx('day', input(chardate, ddmmyy10.), i); /* Incrementar en un día */
numdatetime2 = dhms(numdate, 0, 0, 0);
prueba1=intnx("day", datepart(numdatetime2), 0);
prueba2=intnx("day", datepart(numdatetime2), -5);
prueba3=intnx("day", datepart(numdatetime2), 5);
output;
end;
run;
proc sql;
/* create table fecha_matching as*/
select
a.i as a_i,
a.numdatetime as numdatetime,
b.i as b_i,
b.numdatetime2 as numdatetime2,
intck('dtday',a.numdatetime,b.numdatetime2) as diff
from want a, want2 b
where intck('dtday',a.numdatetime,b.numdatetime2) between -5 and 5
;
quit;
Below your code with some tweaks. Main issue was that in intck() you used 'day' instead of 'dtday' as date directive together with a SAS datetime value.
/* Crear tabla con 20 fechas adicionales */
data want;
/* Definir la fecha inicial */
chardate = "23/01/2023";
format numdate date9. numdatetime datetime20.;
/* Generar 20 fechas adicionales */
do i = 0 to 10;
/* Incrementar la fecha inicial para obtener fechas adicionales */
numdate = intnx('day', input(chardate, ddmmyy10.), i); /* Incrementar en un día */
numdatetime = dhms(numdate, 0, 0, 0);
output;
end;
run;
data want2;
/* Definir la fecha inicial */
chardate = "25/01/2023";
format numdate date9. numdatetime2 datetime20.;
/* Generar 20 fechas adicionales */
do i = 0 to 10;
/* Incrementar la fecha inicial para obtener fechas adicionales */
numdate = intnx('day', input(chardate, ddmmyy10.), i); /* Incrementar en un día */
numdatetime2 = dhms(numdate, 0, 0, 0);
prueba1=intnx("day", datepart(numdatetime2), 0);
prueba2=intnx("day", datepart(numdatetime2), -5);
prueba3=intnx("day", datepart(numdatetime2), 5);
output;
end;
run;
proc sql;
/* create table fecha_matching as*/
select
a.i as a_i,
a.numdatetime as numdatetime,
b.i as b_i,
b.numdatetime2 as numdatetime2,
intck('dtday',a.numdatetime,b.numdatetime2) as diff
from want a, want2 b
where intck('dtday',a.numdatetime,b.numdatetime2) between -5 and 5
;
quit;
Merci Patrick ! c'est parfait !
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.