1 ligne par sujet sous SAS

justine24 Messages postés 6 Statut Membre -  
 djsmooo -
Bonjour à tous.

J'ai un petit problème sous SAS.
J'ai un fichier qui contient un évenement par ligne (donc un individu peut se retrouver sur plusieurs lignes). Je voudrai tout simplement modifier ce fichier afin d'avoir une seule ligne par sujet.
Merci de votre aide!
A voir également:

9 réponses

carl-9000 Messages postés 10 Statut Membre 4
 
Bonsoir,

je viens de me rendre compte que j'ai exactement le même problème que 1958 mais il n'a pas été résolu :

Voilà, j'ai des individus et leur voiture, avec une ligne pour chaque voiture, par exemple :

christophe velsatis
christophe smart
julie twingo
etienne cadillac
etienne 2cv

Je voudrais transformer tout cela pour ne plus avoir qu'une ligne par individu :

christophe velsatis smart
julie twingo
etienne cadillac 2cv

Pourriez vous m'aider ? Merci !!!
3
LunaCoco
 
Bonjour !

La PROC TRANSPOSE de SAS va te faire ça !
2
hamid
 
J'ai un petit problème sous SAS.
J'ai un fichier qui contient un évenement par ligne (donc un individu peut se retrouver sur plusieurs lignes). Je voudrai tout simplement modifier ce fichier afin d'avoir une seule ligne par sujet.
Merci de votre aide!
idem
data toto (keep=NSSI datfin dteffet);
set aa.base_db2;
;
run;

data sortie (keep=NSSI x1 x2 d1 d2);
length d1 $10.
d2 $10.
x1 5.
x2 5.
;
do _n_=1 by 1 until(last.NSSI);
set toto;
by NSSI;
if first.NSSI then do;
d1=put(datfin,ddmmyy10.);
x1=datfin;
* put d1= x1= ;
end;
if last.NSSI then do;
d2=put(datfin,ddmmyy10.);
x2=datfin;
end;
end;
output ;
run;
data sortie1 (keep=NSSI d1 sign);
length date $10.
;
set sortie;
retain sign "A";
do i=1 to _n_;
if x1>=x2 then sign="A";
else sign="B";
if sign="B" then d1=d2;
end;
* output;
run;
0
hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50
 
Salut,
Un moyen de le faire avec:

PROC SQL; create table ta_table as
select distinct ton_id
from ta_table;
quit;

Mais pourquoi tu veux effacer les autres lignes?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kalderon Messages postés 7 Statut Membre 9
 
Bonjour,

une manière plus simple:

Proc sort data=nomdelatable NODUPKEY;
    by nom_individu;
Run;


La commande NODUPKEY permet de supprimer les doublons. Associée avec le by+une variable au choix (qui identifie, genre "nom" ou "numero"), elle affiche une ligne par individu, sans doublon.

A+
0
1598 Messages postés 2 Statut Membre
 
Bonjour,

J'ai un fichier qui résume de nombreuses données par entreprise.
(Entr Donnée1 Donnée 2 Donnée3 ...)

Parfois, une entreprise a plusieurs données3, et j'ai donc plusieurs lignes pour une seule entreprise :
(toutes les autres données sont reprises dans chacune des lignes)

Entr Donnée1 Donnée 2 Donnée3 ...
A 20000 4000 Xavier
B 35000 2700 Jean
B 35000 2700 Gilbert
C 37000 7300 Françoise
D 43000 5600 Mathilde
D 43000 5600 Valentin
D 43000 5600 Augustin

(La colonne Données3 me donne le nom de l'actionnaire, mais j'ai plusieurs actionnaires pour une seule entreprise, donc j'ai plusieurs lignes avec à chaque fois les mêmes données sauf pour la colonne actionnaire qui change)

Comment puis je ne conserver qu'une seule ligne par entreprise et avoir plusieurs colonnes Données3 (Données3.1 Données3.2 Données3.3 ...)

Je peux extraire les données d'une autre manière, et dans ce cas, j'ai une seule ligne par entreprise mais la colonne Données3 contient les noms de chaque actionnaire à la suite (exemple : Jean|Gilbert) et dans ce cas, je voudrais que chaque actionnaire soit dans une colonne distincte)

Merci d'avance pour votre aide

(je ne m'y connais pas trop en SAS, mais je travaille principalement en data set ou avec des procédures du style proc freq, proc means ...)
0
celia
 
bonjour,
je voudrai savoir comment faire pour savoir si on a sur plusieurs variables d'une tables les memes caractères?
par exemple:
Nom prenom
Denis Frank
frank hul
comment savoir l'existance du mot frank dans les deux colonnes?
merci
0
papilluce > celia
 
Bonjour,
je voudrai savoir comment faire pour savoir si on a sur plusieurs variables d'une tables les memes caractères?
par exemple:
Nom prenom
Denis Frank
frank hul
comment savoir l'existance du mot frank dans les deux colonnes?
merci


1 / Si tu veux savoir si "franck" existe dans les deux colonnes, tu peux faire un truc du genre:

data nom;
set tatable;
keep Nom;
rename Nom=newvar;
run;
data prenom;
set tatable;
keep prenom;
rename prenom=newvar;
run;
proc sort data=nom;
by newvar;
run;
proc sort data=prenom;
by newvar;
run;
data tout;
merge nom (in=A) prenom (in=B);
if A and B;
run;

Ainsi tu ne garde que les valeurs qui sont dans les deux colonnes.


2 / Si tu veux savoir si "franck" existe plusieurs fois dans toute la table, tu peux faire un truc du genre:

data nom;
set tatable;
keep Nom;
rename Nom=newvar;
run;
data prenom;
set tatable;
keep prenom;
rename prenom=newvar;
run;
data tout;
set tot_1 toto_2;
run;
proc sort data=tout nodupkeys dupout=nomprenomendouble;
by newvar;
run;

Ainsi tu ne garde que les valeurs qui sont présentes plusieurs fois dans la table de départ.

J'espère que ça t'aide
0
gadd
 
je suis dedans en ce moment donc je te donne une réponse lundi je pense
0
abcd
 
slt
Est ce que vous avez trouvé la solution? car j'ai le meme probleme
merci!!
0
papilluce Messages postés 1 Statut Membre
 
* trier le fichier de données de départ;
proc sort data=donnees_0;
by Nom Voiture;
run;

* créer un compteur si voiture n'est pas un format numérique du type 1='smart', 2='twingo' etc...;
data donnees_1;
set donnees_2;
by Nom Voiture;
if first.Nom then cmpt=1;
else cmpt+1;
run;

* creer autant de colonnes que de lignes par Nom;
Data uneligne;
array Voiture (XX)$; * remplacer XX par le nombre max de voitures par nom dans donnees, le $ est obligatoire si voiture est une variable au format caractère;
retain voiture1-voitureXX;
set donnees;
by Nom Voiture;
if first.Nom then do; * initialisation des variables voitureXX;
do i=1 to XX;
voiture(i)="";
end;
end;
do j=1 to XX;
* si Voiture est un format du type 1='smart', 2='twingo' alors remplacer cmpt par voiture dans le paragraphe suivant;
if cmpt=j then do;
voiture(j)=Voiture;
end;
end;
* on ne garde que la dernière ligne por chaque nom;
if last.Nom then output;
run;
0
djsmooo
 
Bonjour,
J'ai le meme probleme, et j'ai utilisé le programme si dessus ,,mais j'ai toujours un message d'erreur malgrés les differents chagements que j'ai due efféctué,,,

aidez moi svp!!!!


voici mon programme:



Data uneligne;
array nomgest (3)$35.;
retain nomgest1-nomgest6
set auxi_3;
by refsin lnompnm;
if first.refsin then do;
do i=1 to 3;
nomgest(i)="";
end;
end;
do j=1 to 3;

if cmpt=j then do;
nomgest(j)=nomgest;
end;
end;

if last.refsin then output;
run;


voici le message d'erreur qui s'affiche:


Data uneligne;
14876 array nomgest (3)$35.;
14877 retain nomgest1-nomgest6
14878 set auxi_3;
14879 by refsin lnompnm;
ERREUR: Aucune instruction SET, MERGE, UPDATE, ou MODIFY présente.
14880 if first.refsin then do;
14881 do i=1 to 3;
14882 nomgest(i)="";
14883 end;
14884 end;
14885 do j=1 to 3;
14886
14887 if cmpt=j then do;
14888 nomgest(j)=nomgest;
ERREUR: Référence à l'array nomgest interdite.
14889 end;
14890 end;
14891
14892 if last.refsin then output;
14893 run;

NOTE: Valeurs numériques converties en valeurs alphanumériques aux positions indiquées par :
(Ligne):(Colonne).
14888:1
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison d'erreurs.
AVERTISSEMENT: La table WORK.UNELIGNE est peut-être incomplète. Lorsque cette étape a été stoppée, il y
avait 0 observations et 11 variables.
AVERTISSEMENT: Table WORK.UNELIGNE non remplacée car cette étape a été interrompue.
NOTE: L'étape DATA a utilisé (Durée totale du processus) :
temps réel 0.01 secondes
0

Discussions similaires