supprimer les doublons après la mise à jour
bonjour tout le monde, j'ai une problématique à vous poser :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| data test2;
input id $ region $ departement $ quartier $ commune $;
cards;
10 25 NULL NULL NULL
10 NULL 27 NULL NULL
10 NULL NULL 13 20
111 94 NULL NULL NULL
113 27 NULL NULL NULL
113 NULL 25 NULL NULL
113 NULL NULL 30 NULL
113 70 NULL NULL NULL
113 NULL NULL NULL 100
;
run; |
je veux supprimer les doublons mais avant de le faire j'aimerais bien mettre à jour les valeurs NULL de même id
exemple pour id =10 j'aurai la ligne 10 27 13 20
j'aurais comme résultat ce tableau
Code:
1 2 3
| 10 25 27 13 20
111 94 NULL NULL NULL
113 70 25 30 100 |
je vous remercie d'avance
Regrouper des observations
Bonjour,
Êtes-vous sûr de ce que vous voulez faire ? Une de vos collègues a posé une question sur le même jeu de données ici.
Votre demande n'est pas suffisamment précise. Comment choisissez-vous entre la région 27 et la région 70 pour l'id 113 ?
En supposant que vous vouliez le maximum, vous pouvez utiliser la proc univariate :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| data test2;
input id region departement quartier commune;
cards;
10 25 . . .
10 . 27 . .
10 . . 13 20
111 94 . . .
113 27 . . .
113 . 25 . .
113 . . 30 .
113 70 . . .
113 . . . 100
;
run; |
Code:
1 2 3 4 5
| proc univariate data=test2 noprint;
var region departement quartier commune;
by id;
output out=test2_out max=region departement quartier commune;
run; |
Code:
1 2 3 4
| id region departement quartier commune
10 25 27 13 20
111 94 . . .
113 70 25 30 100 |
Cordialement,
Regrouper des observations
Bonjour,
Je ne connais pas de fonction "dernière donnée non manquante" qui pourrait être utilisée dans la proc univariate.
Une possibilité est de traiter chaque variable indépendamment et merger les tables obtenues :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| data test2;
input id $ region $ departement $ quartier $ commune $;
cards;
10 25 NULL NULL NULL
10 NULL 27 NULL NULL
10 NULL NULL 13 20
111 94 NULL NULL NULL
113 27 NULL NULL NULL
113 NULL 25 NULL NULL
113 NULL NULL 30 NULL
113 70 NULL NULL NULL
113 NULL NULL NULL 100
;
run; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| %macro niveau(niv);
data ∋
set test2(keep=(id niv) where=(niv ne "NULL"));
by id;
if last.id;
run;
data test2_out;
merge test2_out ∋
by id;
run;
%mend; |
Code:
1 2 3 4 5 6 7 8
| data test2_out;
length id 8.;
run;
%macro niveau(region);
%macro niveau(departement);
%macro niveau(quartier);
%macro niveau(commune); |
Cordialement,
PS : J'ai vu que j'avais oublié de coller le code de la proc univariate dans mon précédent message, c'est réparé.