我是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
如果条件满足,那么
文件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;
答案 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
;