Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS STAT
SAS STAT Forum d'entraide sur les fonctionnalités liées à la statistique sur SAS : statistique descriptive, test, régression, classification
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 28/11/2011, 21h37   #1
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Par défaut Proc SUMMARY erreur dans la log

Bonjour,
J'ai tenté en vain de comprendre pourquoi ma proc summary ne marche pas sans succès donc chers amis et passionnés je fais appel à vous.
Cette proc fait partie d'une macro.
annee_en_cours=2010
mois=12.

Mon programme:
Code :
1
2
3
4
5
6
7
8
 
 
proc summary DATA=divpres nway;
class no_seq_cli_ben co_typ_div_pre an_deb_ren_div;
var DIV_1966-DIV_&annee_en_cours; /*Veut pas du paramètre &annee_deb=1966 ?????*/
var DIV_1_&annee_en_cours-DIV_&mois._&annee_en_cours ;
output out=divpres2(DROP=_type_ _freq_) sum = ;
run;
Erreur dans la log:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
PRINT(EXTRACTION_RET_DIVISION):   proc summary DATA=divpres nway;
MPRINT(EXTRACTION_RET_DIVISION):   class no_seq_cli_ben co_typ_div_pre an_deb_ren_div;
MPRINT(EXTRACTION_RET_DIVISION):   var DIV_1_2010-DIV_12_2010 ;
ERROR: Either roots don't match or start suffix after end suffix.
MPRINT(EXTRACTION_RET_DIVISION):   output out=divpres2(drop=_type_ _freq_) sum = ;
MPRINT(EXTRACTION_RET_DIVISION):   run;
 
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.DIVPRES2 may be incomplete.  When this step was stopped there were 0 observations and 0 variables.
WARNING: Data set WORK.DIVPRES2 was not replaced because this step was stopped.
NOTE: PROCEDURE SUMMARY used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
Au debut je voulais tout mettre dans un seul VAR mais ca marchais pas!
Avec deux ca va mieux mais mon deuxième ne fonctionne pas.

Question subsidiaire: savez-vous pourquoi en mettant $annee_deb à la place de 1966 le programme considère qu'il s'agit de "DIV_ 1966" et sa plante car il dit que DIV_ n'est pas une variable.

Merci.
MDsas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 06h56   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Bonjour Mariam.
Ton programme ne fonctionne pas pour 2 raisons : 1) parce que SAS ne voit pas la logique de numérotation qui passe de VAR_1_1966 à VAR_12_2010 (il y a 2 séries de numéros et il ne s'attend qu'à une seule, le second _ vient le perturber) et 2) parce que l'écriture avec un tiret demande la série complète des nombres (donc il devrait y avoir, par exemple, VAR_13_1966, si SAS comprenait qu'il y avait une numérotation double).
Pour la question subsidiaire, il y a visiblement un espace dans la valeur de ta macro-variable &annee_deb. D'où le message. div_%LEFT(&annee_deb) devrait être mieux accueilli.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 15h55   #3
Membre régulier
 
Femme Mariam
Statisticienne-Consultante BI
Inscription : avril 2008
Messages : 127
Détails du profil
Informations personnelles :
Nom : Femme Mariam
Localisation : Canada

Informations professionnelles :
Activité : Statisticienne-Consultante BI
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 127
Points : 96
Points : 96
Merci Olivier tu m'a donné des pistes.
Le %Left n'a pas marché il met des erreurs ....SET the option MRECALL ???
J'ai pallié le problème en rajoutant %eval.
Le deuxième VAR devrait voir DIV_1_2010 à DIV_12_2010 avec l'évolution sur le mois et non l'année. Pour remedier au deuxième _ j'ai inversé au préalable le mois et l'année dans un data précédant la Proc summary.....et réinverser dans un autre suivant la proc summary!
C'est peut être pas l'idéal mais ca marche.

Voici le code.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
%macro ...
......
DATA divpres;
      SET divpres;
 
	  * pour corriger un cas problème à l'info-centre';
 
IF no_seq_cli_ben = 138300914 then co_typ_div_pre = 'RRQ';
%do i=1 %TO &mois.;
	RENAME DIV_&i._&annee_en_cours. =DIV_&annee_en_cours._&i.; /*pour besoin d'inversion*/
%end;
run;
 
proc summary DATA=divpres nway;
class no_seq_cli_ben co_typ_div_pre an_deb_ren_div;
var DIV_%eval(&annee_deb)-DIV_&annee_en_cours; /*rajout du %eval*/
var DIV_&annee_en_cours._1-DIV_&annee_en_cours._&mois.; /*inversion de la position de la macro variable qui s'incremente*/
output out=divpres2(DROP=_type_ _freq_ ) sum = ;
run;
 
 
...../*renommer les variables DIV/mois par la suite*/
 
%mend;
Merci.
MDsas 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 00h16.


 
 
 
 
Partenaires

Hébergement Web