【问题标题】:SAS search multiple values in a stringSAS搜索字符串中的多个值
【发布时间】:2017-12-06 16:04:26
【问题描述】:

我有两个 SAS 数据集(为简单起见),每个数据集都有一个 char 变量。第一个数据集有一个带有公司描述的变量(有时包括城市,有时不包括;一个杂乱的字段),第二个数据集有一个变量,其中列出了所有城市。我需要在第一个数据集中创建变量,说明是否找到了第二个数据集中的任何城市,结果不应该只包含 0 或 1 个答案,而是城市本身。 有没有不循环 INDEXW(或类似)函数的简单方法?

【问题讨论】:

    标签: sas


    【解决方案1】:

    indexw 有什么问题?使用 proc sqlindexw 可以实现非常简单的解决方案。

    样本数据:

    data have_messy;
      length messy $100;
      messy = 'this is a city name: brisbane' ; output;
      messy = 'this is a city name: sydney'   ; output;
      messy = 'this is a city name: melbourne'; output;
    run;
    
    data have_city;
      length city $20;
      city = 'sydney'  ; output;
      city = 'brisbane'; output;
    run;
    

    查询示例:

    proc sql noprint;
      create table want as
      select a.*,
             b.city
      from have_messy a
      left join have_city  b on indexw(a.messy, b.city)
      ;
    quit;
    

    结果:

    messy                               city 
    ===============================     =========
    this is a city name: sydney         sydney 
    this is a city name: brisbane       brisbane 
    this is a city name: melbourne   
    

    小心 - 如果找到多个城市名称,上述查询可能会在表 a 中的每行返回多个结果。我建议您执行后续步骤以根据您的要求处理任何重复的行。

    【讨论】:

    • 没有错!只是没有意识到我可以在 join 中使用该功能...今天学到了很多东西。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多