【发布时间】:2017-12-06 16:04:26
【问题描述】:
我有两个 SAS 数据集(为简单起见),每个数据集都有一个 char 变量。第一个数据集有一个带有公司描述的变量(有时包括城市,有时不包括;一个杂乱的字段),第二个数据集有一个变量,其中列出了所有城市。我需要在第一个数据集中创建变量,说明是否找到了第二个数据集中的任何城市,结果不应该只包含 0 或 1 个答案,而是城市本身。 有没有不循环 INDEXW(或类似)函数的简单方法?
【问题讨论】:
标签: sas
我有两个 SAS 数据集(为简单起见),每个数据集都有一个 char 变量。第一个数据集有一个带有公司描述的变量(有时包括城市,有时不包括;一个杂乱的字段),第二个数据集有一个变量,其中列出了所有城市。我需要在第一个数据集中创建变量,说明是否找到了第二个数据集中的任何城市,结果不应该只包含 0 或 1 个答案,而是城市本身。 有没有不循环 INDEXW(或类似)函数的简单方法?
【问题讨论】:
标签: sas
indexw 有什么问题?使用 proc sql 和 indexw 可以实现非常简单的解决方案。
样本数据:
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 中的每行返回多个结果。我建议您执行后续步骤以根据您的要求处理任何重复的行。
【讨论】: