SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1635|回复: 1
打印 上一主题 下一主题

非常规跨表查询,求助.

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2013-4-10 15:43:11 | 只看该作者

非常规跨表查询,求助.

两个表city, customer

[b:3czjas30]CITY[/b:3czjas30]
No        CITY
1        SHANGHAI
2        BEIJING
3        SHENZHEN
4        GUANGZHOU
5        HANGZHOU

[b:3czjas30]CUSTOMER[/b:3czjas30]
Cust_id        Address
1        #3523420 SHANGHAI
2        234hkjhad asdf SHANGHAI
3        #4390523 dfklj GUANGZHOU asdfkasdf
4        #435 HANGZHOU 34523
5        #345934 dsfkjlg


现在的问题是,我要再customer表里面增加一个新的列,城市.
也就是说扫描address,然后如果里面的值和城市表的城市值一样,就提取这个城市的名字.

求助...
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2013-6-1 09:05:44 | 只看该作者

Re: 非常规跨表查询,求助.

[code:2j9epq8g]proc sql noprint;
  select count(*) into :cnt
  from city;
quit;

data _null_;
call symput ('cnt', strip(put(&cnt0,8.)));
run;

proc sql noprint;
  select city into :var1 - :var&cnt
  from city;
quit;

%macro mylist;
%do i=1 %to &cnt;
"&&var&i"
%end;
%mend;


data NEW_CUSTOMER;
length CITY $20.;
  set CUSTOMER;
  array test[&cnt] $20  _TEMPORARY_ (%mylist) ;
  do i=1 to &cnt;
  if index(address,strip(test(i)))>0 then city=test(i);
  end;
  drop i;
run;[/code:2j9epq8g]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-2 07:27 , Processed in 0.076255 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表