如何使用SAS中包含一个值的另一个数据集为新变量分配值

时间:2019-06-03 10:10:40

标签: variables sas

我有一个数据框

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

2 个答案:

答案 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