SAS:合并两个数据集

时间:2018-03-13 06:23:36

标签: merge sas

我是stackoverflow的新手,希望有人能帮我解决SAS问题。 我有两个SAS数据集,其中包含以下列:

文件1(示例):

 id, a1, b1, var1,var2   
 1,50,20,a,1    
 1,40,15,b,2  
 1,30,25,c,3    
 1,23,17,d,4    
 2,45,26,e,5    
 2,34,14,f,6    
 2,32,18,g,7    
 3,67,32,h,8    
 3,58,27,j,9    
 3,33,16,k,10   
 4,42,35,l,11    
 4,26,16,m,12    
 4,36,19,n,13    
 ...  

文件2(示例):

 id, x1,x2,y1,y2  
 1,23,50,15,25  
 2,32,45,14,26  
 3,33,67,16,32  
 4,26,42,16,35  
 ...  

我需要合并这两个文件并在文件1上执行以下条件:

 if x1<=a1<=x2 and y1<=b1<=y2 

如果条件满足,那么

  1. 输出文件1和文件2中的所有列
  2. 将unique_id从文件2重命名为unique_id_2和
  3. 创建具有以下结构的新文件3:
  4. 文件3(结果):

     id, id_2, a1,b1,var1,var2   
    

    生成的文件将包含满足条件的所有观察值,这些观察值由unique_id,unique_id_2和文件1和文件2中的所有列分类。由于来自文件1的各种unique_id的各种观察,因此文件3将具有比文件1更多的观察结果。可以满足文件2中包含的条件。

    提前感谢您的帮助。

    **补充评论***
    在等待回复的过程中,我尝试了这个代码,我觉得它很有效(我需要检查一下):

    data File3;  
    set File2(rename=(id=id_2));
    do i=1 to nobs;  
    set File1 point=i nobs=nobs;  
    if x1<=a1<=x2 and y1<=b1<=y2 then output;  
    end;  
    run;
    

1 个答案:

答案 0 :(得分:1)

由于File2确实具有唯一的id值,一般方法是

data want;
  merge file2 file1;
  by id;
  * subsetting if, any thing that passes through is output;
  if x1<=a1<=x2 and y1<=b1<=y2;
run;

由于合并是id并且id对两个表都是通用的,因此您不需要unique_id_2

但是,如果您将file1的每一行加入file2而不考虑id,我建议Proc SQL交叉加入。

proc sql;
  create table want as
  select 
    file1.unique_id, file2.unique_id as unique_id_2
  , file2.x1, file1.a1, file2.x2
  , file2.y1, file1.b1, file2.y2
  from file1
  cross join file2
  where x1<=a1<=x2 and y1<=b1<=y2 
  ;