我有一个数据框
ID value1
1 12
2 345
3 342
我有第二个数据框
value2
3823
如何获得以下结果?
ID value1 value2
1 12 3823
2 345 3823
3 342 3823
我所做的任何加入
ID value1 value2
1 12 .
2 345 .
3 342 .
. . 3823
答案 0 :(得分:2)
不需要联接或辅助变量:
data have;
do i = 1 to 3;
output;
end;
run;
data lookup;
j = 1;
run;
data want;
set have;
if _n_ = 1 then set lookup;
run;
如果没有if _n_ = 1
,则数据步骤将在一次迭代后停止,该步骤试图从查找数据集中读取第二行并发现没有剩余的行。
这要求have
数据集已经不包含与查找数据集附带的变量同名的变量。
答案 1 :(得分:1)
到目前为止,最简单的方法是利用PROC SQL并定义条件1 = 1,每次比较总是如此:
data first;
input ID value1 @@;
cards;
1 12 2 345 3 342
run;
data second;
input value2 ;
cards;
3823
run;
proc sql;
create table wanted as
select * from first
left join second
on 1 =1
;quit;
编辑:据我所知,并没有直接按每行合并数据集的方法,但是您可以执行以下技巧:
添加变量帮助:
data second_trick;
set second;
help=1;
run;
data first_trick;
set first;
help=1;
run;
然后我们只通过静态变量执行合并:
data wanted_trick;
merge first_trick(in=a) second_trick;
by help;
if a; /*Left join, just to be sure.*/
run;
现在这仅在您要添加单个静态值时有效。不要尝试使用它,因为您的第二集包含更多行。
有关合并和联接的更多信息,请参见:https://support.sas.com/resources/papers/proceedings/proceedings/sugi30/249-30.pdf