首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAS如何有效地查找和匹配

SAS如何有效地查找和匹配
EN

Stack Overflow用户
提问于 2020-07-15 03:50:25
回答 1查看 31关注 0票数 0

我有一个包含36列姓名的表A。有一个name-id的xwalk文件,我们称它为x。我需要使用xwalk文件x向表A添加36列id。

如果需要,为了提高效率,这里提供了实际的数据/表大小:我的表A有340行,名称都是文本。xwalk表x有700+行,ids都是数字。每次当名称A中的一列与ID匹配时,可以将xwalk子集到较少数量的潜在池中。这样的子集的大小范围是:9到140。

我想我可以做36次左连接,但似乎应该有更有效的方法来做。有什么建议吗?

为简单起见,表A的示例数据代码有4列。

代码语言:javascript
运行
复制
data A;
 input  name1 $1-5  name2 $7-10 name3 $12-15 name4 $17-20;
 datalines;
Harry Mary John Kate
Lee   Sam  Joel Sky
;
run;

data x;
input name $1-5 id;
datalines;
Harry 1
Marry 2
John  3
Kate  4
Sam   5
Sky   7
Joel  12
Lee  99
;
run;


data want;
input name1 $1-5  name2 $7-10 name3 $12-15 name4 $17-20 id1 id2 id3 id4;
datalines;
Harry Mary John Kate 1 2 3 4
Lee   Sam  Joel Sky 99 5 12 7
;
run;
EN

回答 1

Stack Overflow用户

发布于 2020-07-15 04:49:33

下面是一个散列对象/数组版本:

代码语言:javascript
运行
复制
data want;
    if _n_ = 1 then do;
        if 0 then set x;
        declare hash x(dataset:"x");
        x.DefineKey("name");
        x.DefineData("id");
        x.DefineDone();
    end;
    
    set a;
    array nms{4} $ name1-name4;
    array ids{4} id1-id4;

    do i = 1 to dim(nms);
        if x.find(key:nms{i}) = %sysrc(_sok) then ids{i} = id;
        else id = .;
    end;
    
    drop i id name;
run;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62902984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档