2 votes

Comment transformer un nombre formaté en date en nombre en SQL

Je rencontre un problème très déroutant lorsque je code SQL dans SAS. Mon code est le suivant :

proc sql noprint;
   select VDte into :vdate 
   from test1;
quit;

proc sql;
   create table test3 as 
   select *, cdate>=&vdate. as index
   from test2;
quit;

Je trouve tous les index=1. Il devrait y avoir des index=0 et quelques index=1 . Lorsque j'utilise un nombre au lieu d'une macro-variable vdate par exemple 17685(02Jun2008) au lieu de &vdate. , ça marche !

J'ai également vérifié le VDte. Son type est numérique, le format est ddmmyy10 C'est à dire que le VDte est un nombre stocké dans le SAS ! Mais quand on le donne à &vdate, il y a un problème ! !!

Quelqu'un peut-il m'aider à comprendre cette situation ?

Merci, Andrea

3voto

Dominic Comtois Points 281

Si votre VDte a un format de date SAS, vous devez l'"effacer" avant de stocker sa valeur dans la variable macro :

proc sql;
  select VDte format=8. 
    into :vdate
    from test1;
quit;

Votre comparaison devrait alors fonctionner correctement.

Notez que vous pouvez également utiliser le format date9. pour créer votre variable macro et utiliser ensuite le format cdate>="&vdate"d dans votre deuxième requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X