2016-02-01 2 views
0

J'ai un ensemble de données suivant au format CSV et je veux générer un ensemble de données fusionné. l'ensemble de données 1 soit comme:Match Fusionner dans SAS avec un ensemble de données donné?

Name Age, 
Casper 12, 
Jasper 13, 
Master 14, 
Clapper 15 

et l'ensemble de données 2 soit comme:

Name Age1, 
Casper 13, 
Jasper 14, 
Master 15, 
Clapper 16 

Je veux fusionner ces 2 ensembles de données et créer un 3ème jeu de données comme ceci:

Name Age Age1 
Casper 12 13 
Jasper 13 14 
Master 14 15 
Clapper 15 16 

PS - ce n'est pas une affectation cependant. faisait une fusion régulière sur SAS et frappait avec une requête aléatoire. J'ai essayé de trouver quelque chose de pertinent sur le web.

REMARQUE: L'ensemble de données 1 et 2 ne contient que des cellules individuelles. C'est une cellule composée de 2 entrées dont le nom et l'âge sont en cellule unique.

Répondre

1

Lire dans les fichiers de la même manière - prendre l'entrée de la ligne, séparer le nom et l'âge à l'aide de balayage et compriment la virgule si nécessaire. Entrez le nom en numérique.

data DS1; 
infile cards firstobs=2 truncover; 
length NAME $10. AGE 3.; 
input; 
NAME=scan(_infile_,1,,'s'); 
AGE=input(compress(scan(_infile_,2,,'s'),","),8.); 
cards; 
Name Age, 
Casper 12, 
Jasper 13, 
Master 14, 
Clapper 15 
; 
run; 

data DS2; 
infile cards firstobs=2 truncover; 
length NAME $10. AGE 3.; 
input; 
NAME=scan(_infile_,1,,'s'); 
AGE=input(compress(scan(_infile_,2,,'s'),","),8.); 
cards; 
Name Age, 
Casper 13, 
Jasper 14, 
Master 15, 
Clapper 16 
; 
run; 

Ensuite, à partir d'ici, vous pouvez soit trier les étapes et faire une fusion de jeu de données ou faire une JOIN SQL:

proc sort data=DS1; by NAME; run; 
proc sort data=DS2; by NAME; run; 

data MERGED; 
merge DS1 DS2(rename=(AGE=AGE1)); 
by NAME; 
run; 

OU SQL:

proc sql; 
    create table MERGED2 as 
    select coalesce(t1.NAME,t2.NAME) as NAME 
       , t1.AGE as AGE 
       , t2.AGE as AGE1 
    from 
     DS1 t1 
    full join 
     DS2 t2 
     on t1.NAME=t2.NAME; 
    quit; 
0

Salut après avoir lu vos données dans ce sas essayer:

proc sql; 
create table dataset3 as 
select a.*, b.age1 
from dataset1 as a, dataset2 as b 
where a.name=b.name; 
quit; 

J'aime fusionner mes jeux de données avec proc sql. La table create crée un nouvel ensemble de données, dans l'instruction select a. * Sélectionne toutes les variables de dataset1 (que j'ai nommé 'a' comme référence) et age1 de dataset2 (comme 'b'). Je les fusionne sur le nom. Voir si cela fonctionne. Si ce n'est pas le cas, faites le moi savoir!

-Mike