我有一份名单,列出的人可能有手机号码、家庭电话号码,或者两者都有。对于手机号码和家庭电话号码,数据集通常列出相同的号码。这是我试图为每条记录做的事情:
if cellphonenumber = (homephonenumber) then keep (cellphonenumber) and drop (homephonenumber)我尝试过不同的组合,但都不能正常工作。我能胜任编写SQL和VBA的Access,并已分支到SAS。我知道语法是不同的,Access没有完整的库(即不能识别"distinct")。
发布于 2021-04-02 04:19:26
这里有两种方法。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编程概念的培训。
https://stackoverflow.com/questions/66909673
复制相似问题