将SAS中的合并与给定数据集匹配?

时间:2016-02-01 12:40:11

标签: csv sas

我有以下CSV格式的数据集,并希望生成合并的数据集。 数据集1如下:

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

,数据集2如下:

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

我想合并这两个数据集并创建第三个数据集,如下所示:

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

PS - 虽然这不是任何作业。正在SAS上进行定期合并并使用随机查询进行攻击。很难在网上找到相关的东西。

注意:数据集1和2只有单个单元格。这是一个由2个条目组成的单元格,名称和年龄都在单个单元格中。

2 个答案:

答案 0 :(得分:1)

以相同的方式读入文件 - 使用行输入,使用扫描分隔名称和年龄,并在必要时压缩逗号。将名称输入数字。

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;

然后从这里你可以对步骤进行排序并进行数据集合并或进行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;

OR 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;

答案 1 :(得分:0)

您好,在将数据读入sas之后,请尝试以下方法:

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

我喜欢将我的数据集与proc sql合并。 create table正在创建一个新数据集,在select语句中a。*正在选择dataset1中的所有变量(我将其命名为'a'作为参考)和age2来自dataset2(作为'b')。我正在将它们合并在一起。看看是否有效。如果不让我知道!

-Mike