Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 15h59   #1
Mirela33
Invité de passage
 
Femme
Statisticienne
Inscription : janvier 2013
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Statisticienne
Secteur : Santé

Informations forums :
Inscription : janvier 2013
Messages : 2
Points : 1
Points : 1
Par défaut Créer un compteur de données manquantes pour suppression de variables

Bonjour,

J'ai besoin d'exporter une table de SAS à Excel. Cela ne marche pas, je pense que c'est dû à un trop grand nombre de variables (plus de 4000 avec presque 3000 observations).

J'ai pas mal de variables avec beaucoup de données manquantes que je pourrais supprimer. Le problème c'est qu'avec plus de 4000 variables, je ne vais pas m'amuser à les supprimer une par une. Je pensais donc créer un compteur de données manquantes pour chaque variable et si le compteur est supérieur à un certain nombre, dire à SAS de supprimer la variable. Le problème c'est que je ne sais pas comment "appeler" les variables, je ne sais pas comment traduire en SAS le "pour chaque variable".

En espérant que ma question soit claire,

Merci beaucoup
Mirela33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 18h45   #2
Géraldine_Cade_SAS
Membre éprouvé
 
Femme Géraldine CADE DESCHAMPS
SAS FRANCE - Support Clients France et Europe
Inscription : février 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Femme Géraldine CADE DESCHAMPS
Localisation : France

Informations professionnelles :
Activité : SAS FRANCE - Support Clients France et Europe
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 176
Points : 475
Points : 475
Bonjour,

Pour votre approche, il faut utiliser des arrays. C'est ce qui permet de faire un même traitement sur plusieurs variables. J'ai écrit un article à ce sujet.

Voici une idée de programme, qui va tester les variables numériques et créées une macro-variable contenant la liste des variables à supprimer). Il faut faire le même programme pour un array _character_.

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
26
27
28
29
30
31
32
DATA data1 ;
SET sashelp.class ;
age=. ;
height=. ;
run ;
 
DATA data2 (DROP=_:) ;
	Length ListVar $32000. ; /* variable qui contiendra le nom des variables à dropper*/
	Array A_TestVarNum (30) _TEMPORARY_ ; /* *. chaque cas est un booléen indiquant si une valeur non nulle a été lue */
 
	SET data1 end=last;
	Array A_VarNum (*) _NUMERIC_ ; /* référence toutes les variables numériques de la table */
 
	/* on teste chaque variable, dès qu'une valeur est nulle on met une valeur 1 au booléen correspondant*/
	Do _i=1 TO dim(A_VarNum) ;
		IF A_VarNum(_i) ne . then A_TestVarNum (_i)=1 ;
	End ;
 
	/* une fois toutes les lignes testées, on regarde chaque booléen pour déterminer quelles variables sont à dropper*/
	IF last then do ;
		Do _i=1 TO dim(A_VarNum) ;
		put A_TestVarNum(_i)= ;
			IF A_TestVarNum(_i) eq . then ListVar=compbl (ListVar !! vname (A_VarNum(_i)) ) ;
		End ;
put ListVar= ;
   		call symput ("ASupprimer", ListVar) ;
	end ;
run ;
 
DATA data3 ;
SET data2 (DROP= &ASupprimer) ;
run ;

Mais j'imagine qu'il y a d'autres manières de faire, peut-être plus légères, comme faire une proc freq pour savoir quelles variables n'ont que des valeurs manquantes, puis lire le résultat déterminer le drop à faire.


Cordialement
Géraldine Cade Deschamps
Support Clients SAS
Géraldine_Cade_SAS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 22h29   #3
datametric
Rédacteur
 
Homme Stéphane Colas
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 2 299
Détails du profil
Informations personnelles :
Nom : Homme Stéphane Colas
Âge : 40
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 2 299
Points : 5 530
Points : 5 530
une autre méthode listant dans une MV nommée list les variables ayant plus de 1 valeur manquante.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
proc summary DATA=data1 ;
var _numeric_;
output out = data2 (DROP=_:) nmiss= /autoname;
run;
 
proc transpose DATA=data2 out=data3;
var _all_;
run;
 
proc SQL noprint;
SELECT scan(_name_,1,'_') INTO :list separated BY ' ' 
FROM data3
WHERE col1 > 0;
quit;
%put &list;
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/01/2013, 11h43   #4
Mirela33
Invité de passage
 
Femme
Statisticienne
Inscription : janvier 2013
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Statisticienne
Secteur : Santé

Informations forums :
Inscription : janvier 2013
Messages : 2
Points : 1
Points : 1
Merci beaucoup c'est parfait !
Mirela33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h01.


 
 
 
 
Partenaires

Hébergement Web