Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2010, 19h36   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 1
Points : 0
Points : 0
Par défaut Comparaison macro-variable en format date

Bonjour,

J'ai cree deux macro variables date dans mon programme, mais je ne suis pas capable de les utiliser dans ma condition, le format ne semble pas bon...

Voila le programme et le message d'erreur:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
* LAST UPDATED DATE;
proc sql;
SELECT max(memo_date) format=date9. INTO :EXTSD FROM trmc.trmc ;
quit;
 
* DATE OF TODAY;
%let a=%sysfunc(today());
%let EXTED = %sysfunc(putN(&a.,date9.));
 
%put Start = &EXTSD; 
%put End = &EXTED; 	
 
proc sql ;
CREATE TABLE TRMC AS 
SELECT id,
datepart(DATE) AS date format=date9.,
TYPE
FROM Rcust 
WHERE datepart(MEMO_DATE) > &EXTSD  AND datepart(MEMO_DATE) < &EXTED;
quit;
Voila le message d'erreur:

Code :
1
2
3
4
5
6
7
8
9
10
NOTE: Line generated BY the macro variable "EXTSD".
1     30NOV2010
        -------
        22
        76
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=,
              <>, =, >, >=, AND, EQ, EQT, GE, GET, GROUP, GT, GTT, HAVING, LE, LET, LT, LTT,
              NE, NET, OR, ORDER, ^=, |, ||, ~=.
 
ERROR 76-322: Syntax error, statement will be ignored.
Si j'ecris ma condition comme cela a la place, c'est le meme probleme:
Code :
1
2
 
WHERE datepart(MEMO_DATE) > '&EXTSD'd AND datepart(MEMO_DATE) < '&EXTED'd
Merci beaucoup pour votre aide!

Joanie
jogin38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 09h08   #2
Membre éclairé
 
Avatar de Filippo
 
Homme Philippe
Statisticien
Inscription : mai 2004
Messages : 654
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 38
Localisation : France, Eure (Haute Normandie)

Informations professionnelles :
Activité : Statisticien

Informations forums :
Inscription : mai 2004
Messages : 654
Points : 396
Points : 396
Bonjour,
avec des quotes ou des guillemets autour de tes macro-variables dans la proc sql, SAS va te dire que les deux éléments autour du comparateur < ou > ne sont pas de même type. Il faut comparer des dates SAS avec des dates SAS.

Ce code fonctionne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* LAST UPDATED DATE;
proc sql;
	SELECT max(memo_date) INTO :EXTSD FROM trmc.trmc ;
quit;
 
* DATE OF TODAY;
%let EXTED =%sysfunc(today());
 
%put Start = &EXTSD; 
%put End = &EXTED; 	
 
proc sql ;
	CREATE TABLE TRMC AS 
	SELECT id, datepart(DATE) AS date format=date9., TYPE
	FROM Rcust 
	WHERE datepart(MEMO_DATE) > &EXTSD  AND datepart(MEMO_DATE) < &EXTED;
quit;
Là le champ date dans la table TRMC sera bien au format date9. et la comparaison dans le where comparera des dates SAS avec des dates SAS.
__________________
"Le sage ne dit pas ce qu'il sait alors que le sot ne sait pas ce qu'il dit"
Filippo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h21.


 
 
 
 
Partenaires

Hébergement Web