1 ligne par sujet sous SAS
justine24
Messages postés
6
Statut
Membre
-
djsmooo -
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!
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:
- Supprimer les doublons sas
- Supprimer rond bleu whatsapp - Guide
- Supprimer page word - Guide
- Doublons photos - Guide
- Supprimer les doublons excel - Guide
- Supprimer pub youtube - Accueil - Streaming
9 réponses
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 !!!
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 !!!
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;
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;
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?
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
une manière plus simple:
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+
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+
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 ...)
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 ...)
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
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
* 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;
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;
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
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