如果家庭电话号码与 SAS 中的手机号码相同,如何删除家庭电话号码?

时间:2021-04-01 18:19:16

标签: sas

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

if cellphonenumber = (homephonenumber) then keep (cellphonenumber) and drop (homephonenumber)

我尝试了不同的组合,但无法正常工作。我有能力为 Access 编写 SQL 和 VBA,并且已经分支到 SAS。我知道语法不同,而且 Access 没有完整的库(即无法识别“distinct”)。

1 个答案:

答案 0 :(得分:1)

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

数据步骤

假设您的数据如下所示:

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() 子例程自动为您设置。

data want;
    set have;
    if(home = cell) then home = ' ';
run;

SQL

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

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() 函数以删除每一行的前导和尾随空格。

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 编程概念的培训。

相关问题