合并SAS中最接近的值

杰夫·埃里克森

SAS中是否有一种方法可以基于数字字段进行模糊合并?说我有下面的两个表,并希望合并在最接近的值。

数据集A:

id_1    label
1       a
2       b
3       c
4       d
6       e

数据集B:

id_2    
1.1     
2.9     
3.4     
4.05   
5.1

结果应为:

id_2    id_1    label
1.1     1       a
2.9     3       c
3.4     3       c
4.05    4       d
5.1     6       e

请注意,由于5.1的情况,此处不能四舍五入。

一种方法,SQL笛卡尔联接。这不是非常快,因此对于大型数据集来说不是一个好的解决方案。

data have_a;
input id_1    label $;
datalines;
1       a
2       b
3       c
4       d
6       e
;;;;
run;

data have_b;
input id_2 ;
datalines; 
1.1     
2.9     
3.4     
4.05   
5.1
;;;;
run;

proc sql;
create table want as
    select B.id_2, A.label , abs(A.id_1-B.id_2) as id_dist
    from have_a A, have_b B
    group by B.id_2
    having id_dist=min(id_dist);
quit;

可以根据每个数据集的大小来构建其他解决方案(既很大,又大又小,或者都小)。例如,PROC FORMAT返回一个不错的结果。

data have_a_fmt;
retain fmtname 'HAVE_AF';
set have_a(rename=(id_1=startpoint label=startlabel));
set have_a(firstobs=2);
set have_a(firstobs=3 rename=(id_1=endpoint label=endlabel)) end=eof;
start=id_1-(id_1-startpoint)/2;
end  =id_1+(endpoint-id_1)/2;
output;

if _n_=1 then do;
  hlo='l';
  end=start;
  start=.;
  label=startlabel;
  output;
end;
if eof then do;
  start=end;
  end=.;
  hlo='h';
  label=endlabel;
  output;
end;
run;

proc format cntlin=have_a_Fmt;
quit;

data want;
set have_b;
label=put(id_2,HAVE_AF.);
run;

除非have_A非常大(数百万以上),否则格式解决方案将非常快。它的工作方式是先行先行和后行合并(使用set,但使用相同的概念),一次获取3个值,分别是前一个当前值和下一个,使用它们来定义范围,并以'low “ hlo”变量的“”和“高”值(基本上将“负无穷大”和“正无穷大”定义为范围内的端点)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

返回数组中最接近值的索引

来自分类Dev

选择最接近变量的值

来自分类Dev

加速循环以用另一个数组中最接近的值填充数组

来自分类Dev

Java:搜索数组中最接近的值

来自分类Dev

查找与数字中最接近的因子

来自分类Dev

如何比较Color对象并获取Color []中最接近的Color?

来自分类Dev

从元素数组中查找T-SQL中最接近的值

来自分类Dev

在排序列表中找到最接近/最接近的值

来自分类Dev

推断numpy数组中最接近的较小值

来自分类Dev

如何找到具有值的元素并在jquery中最接近的<tr>中设置类?

来自分类Dev

C#Mongodb查找集合中最接近的时间

来自分类Dev

.bisect找不到字典中最接近的值

来自分类Dev

如何在动态创建的行中使用下拉列表中最接近文本框设置值的值

来自分类Dev

将字典中的值四舍五入到python中最接近的5吗?

来自分类Dev

根据最接近的值进行过滤/合并

来自分类Dev

用Python中最接近的而非NaN列值填充NaN

来自分类Dev

同一向量中最接近的其他值

来自分类Dev

R将值应用于循环中最接近列表的列

来自分类Dev

给定离散分布,如何将数字四舍五入到该分布中最接近的值?

来自分类Dev

x是否已向下舍入到序列中最接近的指定数字值?

来自分类Dev

将值匹配到R中另一个列表中最接近的较大值

来自分类Dev

基于列值对之间最接近的匹配来合并两个数据框

来自分类Dev

将空值设置为列表中最接近的最后一个非空值-LINQ

来自分类Dev

如何获得列表中最接近的值?

来自分类Dev

检测集合中最接近窗口的元素

来自分类Dev

使用R中最接近的下限值合并两个数据帧

来自分类Dev

如何从POJO属性中找到Java中最接近的值?

来自分类Dev

选择最接近变量的值

来自分类Dev

使用MATLAB中最接近的值匹配列元素

Related 相关文章

  1. 1

    返回数组中最接近值的索引

  2. 2

    选择最接近变量的值

  3. 3

    加速循环以用另一个数组中最接近的值填充数组

  4. 4

    Java:搜索数组中最接近的值

  5. 5

    查找与数字中最接近的因子

  6. 6

    如何比较Color对象并获取Color []中最接近的Color?

  7. 7

    从元素数组中查找T-SQL中最接近的值

  8. 8

    在排序列表中找到最接近/最接近的值

  9. 9

    推断numpy数组中最接近的较小值

  10. 10

    如何找到具有值的元素并在jquery中最接近的<tr>中设置类?

  11. 11

    C#Mongodb查找集合中最接近的时间

  12. 12

    .bisect找不到字典中最接近的值

  13. 13

    如何在动态创建的行中使用下拉列表中最接近文本框设置值的值

  14. 14

    将字典中的值四舍五入到python中最接近的5吗?

  15. 15

    根据最接近的值进行过滤/合并

  16. 16

    用Python中最接近的而非NaN列值填充NaN

  17. 17

    同一向量中最接近的其他值

  18. 18

    R将值应用于循环中最接近列表的列

  19. 19

    给定离散分布,如何将数字四舍五入到该分布中最接近的值?

  20. 20

    x是否已向下舍入到序列中最接近的指定数字值?

  21. 21

    将值匹配到R中另一个列表中最接近的较大值

  22. 22

    基于列值对之间最接近的匹配来合并两个数据框

  23. 23

    将空值设置为列表中最接近的最后一个非空值-LINQ

  24. 24

    如何获得列表中最接近的值?

  25. 25

    检测集合中最接近窗口的元素

  26. 26

    使用R中最接近的下限值合并两个数据帧

  27. 27

    如何从POJO属性中找到Java中最接近的值?

  28. 28

    选择最接近变量的值

  29. 29

    使用MATLAB中最接近的值匹配列元素

热门标签

归档