Bonjour,
Je suis nul en SAS, du coup j'utilise souvent des PROC SQL. Mais là le temps avec un PROC SQL est trop long.
J'ai une table A à mettre à jour : Elle a une vingtaine de colonne, dont une qui va servir d' ID de valeur de rapprochement, et, COL1 et COL2 vide à mettre à jour. (ID apparait plusieurs fois dans A car non discriminantes (accumulation historique) , c'est une autre colonne qui sert de valeur discriminante)
J'ai une table B qui va servir de source pour la mise à jour : Elle a 3 colonnes : ID, COL1 et COL2
j'aimerai mettre à jour la table A, avec les valeur de B.COL1 dans A.COL1 et idem pour COL2 quand A.ID = B.ID
plusieurs problématique :
- pas d'ajout de nouvelles lignes dans A provenant de B
- Pas d'ajout de colonne dans A
donc je cherche une solution SAS rapide, efficace, fiable. Pas de PROC SQL déjà testé.
exemple :
table A (la colA illustre de nombreuses autres colonnes à ne pas toucher qui ont des données diverses mais discriminantes : date, flag, etc.)
id;colA;col1;col2
1;1;;
2;2;;
2;3;;
2;4;;
3;5;;
4;6;;
Table B
id;col1;col2
1;a;e
2;b;f
3;c;g
4;d;h
5;z;m
6;k;n
je fais un proc sort des deux tables en amont puis je fais un merge
DATA table_C ;
MERGE table_A ( IN = A )
table_B ( IN = B ) ;
BY ID ;
IF A ; /* plus rapide que IF A=1 THEN OUTPUT THREE ; !!! */
RUN ;
et au mieux j'obtiens la table C
id;colA;col1;col2
1;1;a;e
2;2;b;f
2;3;;
2;4;;
3;5;c;g
4;6;d;h
les lignes (2;3) et (2;4) n'ont pas été mise à jour ...
je veux obtenir cela :
id;colA;col1;col2
1;1;a;e
2;2;b;f
2;3;b;f
2;4;b;f
3;5;c;g
4;6;d;h
Merci de votre aide
Partager