首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果住宅电话号码与SAS中的手机号码相同,如何丢弃?

如果住宅电话号码与SAS中的手机号码相同,如何丢弃?
EN

Stack Overflow用户
提问于 2021-04-02 02:19:17
回答 1查看 28关注 0票数 0

我有一份名单,列出的人可能有手机号码、家庭电话号码,或者两者都有。对于手机号码和家庭电话号码,数据集通常列出相同的号码。这是我试图为每条记录做的事情:

代码语言:javascript
运行
复制
if cellphonenumber = (homephonenumber) then keep (cellphonenumber) and drop (homephonenumber)

我尝试过不同的组合,但都不能正常工作。我能胜任编写SQL和VBA的Access,并已分支到SAS。我知道语法是不同的,Access没有完整的库(即不能识别"distinct")。

EN

Stack Overflow用户

发布于 2021-04-02 04:19:26

这里有两种方法。SAS支持SQL,但您应该熟悉数据步骤,因为它是SAS最强大的工具之一。

数据步骤

假设您的数据如下所示:

代码语言:javascript
运行
复制
id       home           cell
1                       111-111-0123
2        222-222-0123   222-222-0123
3        333-333-0123   444-444-0123

如果您想删除家里的电话号码,那么简单的if-then逻辑就可以了。在SAS中,字符列缺少' ',数字列缺少.。您可以选择使用call missing()子例程自动设置它。

代码语言:javascript
运行
复制
data want;
    set have;
    if(home = cell) then home = ' ';
run;

SQL

您也可以在SQL中执行此操作:

代码语言:javascript
运行
复制
proc sql;
    create table want as
        select id
             , CASE
                   when(home = cell) then home = ' '
                   else home
               END as home
            , cell
        from have
    ;
quit;

其他信息

如果数据不整洁,并且包含前导或尾随空格,则可以循环遍历所有字符列,以确保删除所有前导/尾随空格。如果您需要标准化您的家庭/手机号码,则需要执行一些额外的标准化逻辑(请注意,如果您可以访问SAS Data Quality Server,则所有这些操作都可以自动完成)。

下面将遍历每个字符变量,并运行strip()函数来删除每一行的前导和尾随空格。

代码语言:javascript
运行
复制
data want;
    set have;
    array charvars[*] _CHARACTER_;
    
    do i = 1 to dim(charvars);
        charvars[i] = strip(charvars[i]);
    end;

    if(home = cell) then home = ' ';

    drop i;
run;

请看一下SAS's free e-learning,了解有关SAS编程概念的培训。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66909673

复制
相关文章

相似问题

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