我有以下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个条目组成的单元格,名称和年龄都在单个单元格中。
答案 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