Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
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 16/11/2011, 12h48   #1
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
Par défaut PROC SUMMARY divisé par 1000

Bonjour,

Est-il possible de diviser le résultat d'une somme via un proc summary par 1000?
Code :
1
2
3
4
5
proc summary DATA=Ref_gro_com_by_auth nway;
	var S_Tot_uti_eur D_Tot_uti_eur;
	class GROUP;
	output out=metric2(DROP= _type_ _freq_) sum=S_Eur D_Eur;
run;
Avant j'utilisais un proc sort et je jouais avec les first. et les last.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
proc sort DATA=Ref_gro_com_by_auth;
	BY GROUP;
run;
 
DATA report3 (keep=eur GROUP);
	SET Ref_gro_com_by_auth;
 
	BY GROUP;
 
	IF first.GROUP then
		eur = 0;
 
	eur + S_tot_uti_eur;
 
	IF last.GROUP then
		do;
		eur = eur / 1000;
		output;
		end;
 
run;
Mais je voulais savoir s'il existait une option permettant de faire la même chose avec le proc summary.
Ou alors il faudrait le faire avec un datastep en plus?

Merci de votre aide
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 06h28   #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.
Je ne vois pas de solution directement dans la proc SUMMARY, sauf à déguiser les valeurs calculées avec un format picture.
Code :
1
2
3
4
5
6
7
8
9
10
PROC FORMAT ;
  PICTURE mille (ROUND)
    LOW-HIGH = "000000009.9999" (MULT=10)
  ;
RUN ;
PROC SUMMARY DATA=sashelp.class ;
  VAR weight ;
  OUTPUT OUT=work.stats SUM= ;
  FORMAT weight mille. ;
RUN ;
Les alternatives sont :
1) passer après la proc SUMMARY avec une étape DATA pour diviser par 1000
2) créer dans la table d'origine une variable de pondération égale à 1/1000 pour l'utiliser dans la proc SUMMARY
Code :
1
2
3
4
5
6
7
8
DATA work.test ;
  SET sashelp.class ;
  pds = 1/1000 ;
RUN ;
PROC MEANS DATA=work.test SUM ;
  VAR weight ;
  WEIGHT pds ;
RUN ;
3) faire ça en SQL
Code :
1
2
3
4
5
6
7
8
PROC SQL ;
CREATE TABLE work.metric2 AS
  SELECT GROUP,
             SUM(S_Tot_uti_eur)/1000 AS S_eur,
             SUM(D_Tot_uti_eur)/1000 AS D_eur
  FROM Ref_gro_com_by_auth
  GROUP BY GROUP ;
QUIT ;
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h55.


 
 
 
 
Partenaires

Hébergement Web