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/10/2011, 15h13   #1
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
Par défaut Création d'une variable de comptage

Bonjour,

J'ai une table qui concerne la consommation médicamenteuse de patients. Mes patients correspondent aux observations et en variable j'ai des noms de médicaments. Chaque patient eput avoir un nombre différent de médicaments. J'aimerai créer une nouvelle variable m'indiquant combient de médicaments consomment les patients.
Ma table ressemble à ça :
numpatient medic1 medic2 medic3 medic4 .....
1 X Y
2 A Y C
3 B X D
....

comment faire

sous excel il me suffit de faire un tableau croisé dynamique mais là????????

merci par avance pour votre aide
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 15h23   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 011
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 011
Points : 1 712
Points : 1 712
Et ben là c'est la proc tabulate, mais il y a peut être plus simple.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 17h51   #3
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
Bonsoir.
SAS ne possède pas directement de fonction pour compter le nombre de variables de type texte qui sont renseignées. Par contre, si on soustrait le nombre de variables vides (comptées avec la fonction CMISS) du nombre total de variables (DIM à condition d'avoir rassemblé toutes les variables dans un Array), alors on a fait le travail.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DATA work.medicaments ;
INFILE DATALINES MISSOVER ;
INPUT numpatient (medic1 medic2 medic3 medic4) (:$1.) ;
DATALINES ;
1 X Y
2 A Y C
3 B X D
;
RUN ;
DATA work.nb ;
  SET work.medicaments ;
  ARRAY meds $ medic1-medic4 ;
  n = DIM(meds)-CMISS(OF meds[*]) ;
RUN ;
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 11h08   #4
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
bonjour,

c'est un peut l'idée que j'avais : je m'étais dit en "francais" dés que tu trouve une variable non renseignée alors tu attribues ce numéro à ma nouvelle variable. Je vais essayer votre solution et vous tiens au courant. Merci,
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 11h15   #5
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
j'ai essayé mais cela ne fonctionne pas, il me mets
Code :
1
2
3
4
5
6
7
8
9
10
11
 
ERROR 68-185: The FUNCTION CMISS IS unknown, OR cannot be accessed.
 
16   RUN ;
 
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The DATA SET WORK.NB may be incomplete.  When this step was stopped there were 0
         observations AND 6 VARIABLES.
NOTE: DATA statement used (Total process time):
      real time           0.06 seconds
      cpu time            0.01 seconds
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 11h20   #6
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
ca doit être parce que je suis sous SAS 9.1
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 13h26   #7
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
Oui, c'est une question de version. CMISS apparaît en v9.2.
Pour la 9.1 on va suivre de plus près ton idée initiale : s'arrêter dès qu'on trouve une valeur manquante.
Code :
1
2
3
4
5
6
7
8
 
DATA work.nb (DROP=i) ;
  SET work.medicaments ;
  ARRAY meds $ medic1-medic4 ;
  DO i=1 TO DIM(meds) WHILE(NOT MISSING(meds[i])) ;
  END ;
  n = i-1 ;
RUN ;
Comme il faut aller à la valeur manquante pour s'apercevoir, justement, qu'elle manque, on doit revenir en arrière de 1 en sortant de la boucle.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 17h32   #8
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
ca fonctionne Super merci!!
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 11h10   #9
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : octobre 2011
Messages : 35
Points : 1
Points : 1
Bonjour,

en fait ca fonctionne mais il y a un petit soucis : c'est que pour les patients qui n'ont aucun médicament ca me met 0. Il faudrait que cela notre à la place . pour considérer comme valeur manquant dans les stat.
craow87000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 07h38   #10
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
Hé bien juste avant le RUN, ajoutons
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 00h02   #11
Invité de passage
 
Homme Rabie Razgallah
ARC
Inscription : octobre 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Rabie Razgallah
Localisation : Tunisie

Informations professionnelles :
Activité : ARC
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : octobre 2011
Messages : 2
Points : 3
Points : 3
Par défaut Erreur survenue pour le même exercice

Bonsoir

j'ai suivi le fil de la discussion pour exactement la même question mais malheureusement la nouvelle variable de comptage ne se crée par et une erreur apparait.

Au fait, j'ai douze variables distinctes, qui comportent les modalités (1 ou 2 ou missing). Je souhaite compter le nombre des valeurs valides pour l'ensemble des variables

exemple de mon fichier

patient ovophas1 ovophase2 ovophas3....etc... ovophase12
1 1 1 2 1
2 . 2 1 2
3 1 . . 2

Ce que je souhaite avoir à la fin pour chaque patient, le nombre des valeurs valides pour toutes les variables (ici patient 1 = 4, patient 2 =3 et patient 3 = 2).

j'ai fait exactement le même code que vous mais il y a une erreur, qui apparait, il ne reconnait pas la nouvelle variable de comptage
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DATA ovoo; SET trialdat.Ovocytes;
keep OvoPHAS1 OvoPHAS2 OvoPHAS3 OvoPHAS4 OvoPHAS5 OvoPHAS6 OvoPHAS7    
OvoPHAS9 OvoPHAS8 OvoPHAS10 OvoPHAS11 OvoPHAS12; 
run;
 
 
DATA ovoo1 (DROP=i); SET ovoo; 
ARRAY NOMBREOVO $ OvoPHAS1-OvoPHAS12;
DO i=1 TO DIM(NOMBREOVO) WHILE(NOT MISSING(NOMBREOVO[i]));
END; 
n = i-1;
run; 
 
proc freq DATA=ovoo1; 
	TABLES NOMBREOVO ;
run;
Rabie. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 00h03   #12
Invité de passage
 
Homme Rabie Razgallah
ARC
Inscription : octobre 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Rabie Razgallah
Localisation : Tunisie

Informations professionnelles :
Activité : ARC
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : octobre 2011
Messages : 2
Points : 3
Points : 3
Par défaut Erreur survenue pour le même exercice (suite)

le message est parti sans que je puisse vous remercier d'avance pour votre aide

bonne soirée à tous
Rabie. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 06h33   #13
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 Rabie.
J'ai l'impression que dans ton cas les variables à compter sont numériques. Alors que dans le reste de cette discussion il s'agissait de noms de médicaments (donc du texte).
Tu peux essayer deux solutions :
1) en enlevant le $ dans ARRAY. C'est de cette manière qu'on indique que l'array contient des variables texte. Sans $ ce sont des données numériques. Un array ne peut pas contenir à la fois des variables texte et des variables numériques.
2) avec juste
Code :
1
2
3
4
DATA ovoo; 
SET trialdat.Ovocytes (keep=OvoPHAS1-OvoPHAS12);
n=N(OF OvoPHAS1-OvoPHAS12) ;
run;
à la place de ARRAY, de la boucle et de tout le reste. Compter les valeurs non manquantes numériques, c'est plus facile que les textes non vides.
Bon courage.
Olivier
olivier.decourt 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 04h26.


 
 
 
 
Partenaires

Hébergement Web