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 13/04/2011, 23h41   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
Par défaut Export de plusieurs variables avec PROC UNIVARIATE

Bonjour,

J'essaie désespérément d'exporter les stats de plusieurs variables dans une table. Je me suis aperçu que PROC MEANS exportait les stats en ligne, or je préfère les avoir en colonne. Je me suis donc tourné vers PROC UNIVARIATE mais elle ne semble pas gérer l'export de plusieurs variables.

Par exemple, le code suivant :

Code :
1
2
3
4
PROC UNIVARIATE NOPRINT DATA=matable;
VAR x y;
OUTPUT OUT=temp MEAN=moyenne;
RUN;
n'exporte que la moyenne de la variable x dans la table matable. Comment faire ?

Merci d'avance,
Mark
Mark531 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 09h11   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Bonjour,
La proc means est pas mal aussi pour faire ça, puis tu transposes

Code :
1
2
3
4
5
6
7
8
proc means DATA=sashelp.class;
var  Weight Height;
OUTPUT OUT=temp(DROP=_TYPE_ _FREQ_) MEAN=;
RUN;
 
proc transpose DATA=temp out=transpose name=variable prefix=moyenne;
var Weight Height;
run;
Bon courage!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h18   #3
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
pour la proc univariate il faut mettre autant de statistiques que de variables sinon sas ne peut pas comprendre!

Code :
1
2
3
4
PROC UNIVARIATE NOPRINT DATA=sashelp.bweight;
VAR weight m_wtgain;
OUTPUT OUT=temp MEAN=moyenne1 moyenne2;
RUN;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 10h32   #4
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
Ah ok, c'était un problème de syntaxe ! Si seulement l'aide de SAS donnait des exemples...

Le problème, c'est que le tableau n'a pas la forme que je souhaite :

Code :
1
2
3
4
PROC UNIVARIATE NOPRINT DATA=matable;
VAR x y;
OUTPUT OUT=temp MEAN=moy1 moy2 STD=std1 std2;
RUN;
Je me retrouve avec un tableau de la forme :

moyX moyY stdX stdY
1

Or, je souhaiterais avoir un tableau de la forme :

moy std
x
y

Un tableau de stats classique quoi ! Malheureusement, ça ne semble pas transposable facilement avec PROC TRANSPOSE... Vous avez une idée ?
Mark531 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 13h02   #5
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
c'est surement jouable avec la transpose, voici en tout cas une solution avec une étape data (qui présente l'avantage contrairement à la transpose de pouvoir effectuer des manipulations complémentaires).

J'ai rajouté une variable "var_orig" pour être sur de ne pas se mélanger les pinceaux...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
PROC UNIVARIATE NOPRINT DATA=sashelp.bweight;
VAR weight m_wtgain;
OUTPUT OUT=temp MEAN=moyenne1 moyenne2 std=std1 std2;
RUN;
 
DATA Tablefinale; 
length var_orig$50.;
SET temp(keep=moyenne1 std1 IN=A)
	temp(keep=moyenne2 std2 RENAME=(moyenne2=moyenne1 std2=std1) IN=B);
	IF A then var_orig=	"weight";
	IF B then var_orig=	"m_wtgain";
run;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h25   #6
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 823
Points : 2 823
Si tu veux récupérer des statistiques comme une moyenne, un écart-type, un min et un max et le nombre d'observations renseignées, tu peux utiliser la proc CORR (à contre-emploi mais directement avec la mise en forme voulue).
L'avantage c'est que ça fonctionne pareil avec 250 variables numériques, et s'il y a des calculs par blocs de variables quali, on ajoute un BY.
Code :
1
2
3
4
5
6
ODS EXCLUDE ALL ;
ODS OUTPUT simpleStats=work.stats ;
PROC CORR DATA=sashelp.class ;
  VAR weight height ;
RUN ;
ODS SELECT ALL ;
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 21h15   #7
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 13
Points : 13
Oui, la PROC CORR exporte en effet des stats descriptives comme je le veux !

C'est fou qu'on ne puisse pas le faire simplement, la solution de Manoutz est quand même très compliquée et demande déjà une sacrée maitrise...

Merci à vous !
Mark531 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 01h00.


 
 
 
 
Partenaires

Hébergement Web