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 11/12/2007, 17h04   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 39
Points : 14
Points : 14
Par défaut Obtenir le nombre de valeurs non manquantes pour une variable

Bonjour,

Je débute avec SAS et je cherche à savoir comment obtenir le nombre d'enregistrements d'une table SAS et le nombre de valeurs non nulles d'une variable.

Plus précisément, je cherche à donner un identifiant unique à chaque observation. J'ai commencé par donner le numéro de l'observation comme identifiant, seulement entre temps, j'ai intercalé d'autres observations. Je voudrais leur donner comme identifiant le nombre de valeurs non nulles de la variable + 1. Est-ce une bonne solution? Y en a-t-il une meilleure?

Merci pour vos réponses...
marie mouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2007, 22h30   #2
Membre habitué
 
Inscription : juillet 2006
Messages : 284
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 284
Points : 107
Points : 107
Bonjour,

Peut-être les petits programmes suivants pourront t'aider :

CREATION D'UN PETIT JEU DE DONNEES
Code :
1
2
3
4
5
DATA bidon; input X1 ; cards;
0
35
0
;run;
CREATION D'UNE VARIABLE POS
Code :
1
2
3
4
DATA bidonbis ;
SET bidon;
IF X1 = 0 then pos = 1; else pos=0;
run;
PROG POUR COMPTER NOMBRE D'ENREGISTREMENTS
Code :
1
2
3
4
%let ds=%sysfunc(open(work.bidon));
%let nb_obs=%sysfunc(attrn(&ds,nlobs));
%let ds=%sysfunc(close(&ds));
%put &nb_obs;
ash_rmy
ash_rmy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 09h33   #3
Responsable SAS
 
Inscription : septembre 2006
Messages : 1 973
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 973
Points : 4 810
Points : 4 810
Salut,
Que veux-tu exactement?
Dénombrer le nombre d'observation et le nombre de valeurs manquantes ou créer un identfiant pour une table.
En parlant d'identifiant sache que tu peux créer des clés contenant plusieurs variable : pour être plus claire un identifiant peux être déterminer par une, deux variables ou plus de deux variables : genre le nom, prenom, date de naissance et date du jour!!
Suivant ta réponse nous pourrons orienter nos réponses.
fafabzh6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2007, 16h23   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 39
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 39
Points : 14
Points : 14
Dans ma table, j'ai des noms , prénoms - hashés, et autres données médicales de patiente. Certaines d'entre elles peuvent être des homonymes (même nom, même prénom et parfois même même date de naissance!). Donc ce n'est pas forcément une bonne idée de les utiliser comme identifiants.

Je veux créer un numéro unique pour chaque observation qui identifiera une et une seule patiente. Je pensais prendre le numéro de l'observation et puis si des observations s'intercalent entre temps, je voulais prendre le nombre d'observations + 1. J'ai voulu utiliser une fonction de génération de nombre pseudo-aléatoire mais il y a toujours un doublon et SAS refuse du coup - et c'est normal - de procéder à la mise en place de la clé primaire.

Je suis tout à fait capable de pondre un algorithme en java qui génère un numéro unique. Mais alors avec SAS, je dois apprendre à raisonner autrement...

Voilà

Merci
marie mouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 09h12   #5
Responsable SAS
 
Inscription : septembre 2006
Messages : 1 973
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 1 973
Points : 4 810
Points : 4 810
Avec le langage marco de SAS tu peux réussir à faire à peu près le même type de programmation : boucle, test if, ......, declaration de variables.

Par contre juste une question : concernant tes doublons tu suppose donc que chaque personne n'apparaît qu'une et une seule fois : il n'y a donc aucun doublons dans ta table!!
En effet en ne créant un identifiant que par rapport à son numero d'observation tu ne pourra pas identifier des personnes similaires!!

Une autre question : pourquoi ton numero d'observation n'est pas déjà unique (donc succeptible d'être une clé)??
fafabzh6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 17h33   #6
Membre éprouvé
 
Inscription : octobre 2007
Messages : 442
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 442
Points : 485
Points : 485
J'ai peut-être raté un épisode, mais pourquoi tu n'utilises pas la variable interne _N_ pour générer tes IDs ?

Code :
1
2
3
4
DATA dossierMedical;
SET patients;
ID=_N_;
run:
Duc Lebowski 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 07h08.


 
 
 
 
Partenaires

Hébergement Web