Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS搜索字符串中的多个值_Sas - Fatal编程技术网

SAS搜索字符串中的多个值

SAS搜索字符串中的多个值,sas,Sas,我有两个SAS数据集,每个数据集中(为简单起见)有一个char变量。第一个数据集有一个带有公司描述的变量(有时包括城市,有时不包括;一个混乱的字段),第二个数据集有一个变量,其中列出了所有城市。我需要在第一个数据集中创建一个变量,说明是否找到了第二个数据集中的任何城市,结果不应该只包含0或1个答案,而是城市本身。 有没有一种不循环INDEXW(或类似)函数的简单方法?INDEXW有什么问题?使用procsql和indexw可以提供非常简单的解决方案 样本数据: data have_messy;

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

INDEXW有什么问题?使用
procsql
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中的每行返回多个结果。我建议您运行后续步骤,根据您的要求处理任何重复的行。

没有问题!只是没意识到我可以在join中使用这个函数。。。今天学到了很多。谢谢