楼主: liuliuqiu
1002 5

[问答] 求教SAS程序 [推广有奖]

  • 6关注
  • 2粉丝

副教授

62%

还不是VIP/贵宾

-

威望
0
论坛币
2340 个
通用积分
8.9561
学术水平
3 点
热心指数
5 点
信用等级
5 点
经验
14393 点
帖子
429
精华
0
在线时间
1113 小时
注册时间
2009-3-24
最后登录
2024-2-29

10论坛币
有a、b两个表,a中变量name(企业名称),b中变量city(市县名称),想在a表中生成新的变量where,其中where为企业所在地,变量生成的方法是:找name(企业名称)中是否含有city(市县名称),如果有,返回市县名称,如果没有,则空白。谢谢


最佳答案

hszest 查看完整内容

完整解决方案: 结果如下:
关键词:sas程序 Where City name 企业名称 所在地 where 程序
沙发
hszest 学生认证  发表于 2016-12-13 13:59:28 |只看作者 |坛友微信交流群
完整解决方案:

  1. data a;
  2. infile datalines;
  3. input name $ 20. ;
  4. datalines;
  5. CityA Enter1
  6. CityB Enter2
  7. CityA Enter3
  8. CityC Enter4
  9. ;
  10. run;
  11. data b;
  12. infile datalines;
  13. input city $;
  14. datalines;
  15. CityA
  16. CityB
  17. ;
  18. run;

  19. proc sql;
  20. create table a_new
  21. as
  22. select a.name as Name, aux.city as Where
  23. from a left join
  24.     (select a.Name as Name, b.City as City
  25.     from a, b
  26.     where find(trim(a.Name), trim(b.City),'i') gt 0) as aux
  27.     on
  28.     a.name=aux.name
  29. ;
  30. quit;
复制代码


结果如下:
output.PNG

使用道具

藤椅
liuliuqiu 发表于 2016-12-13 14:41:46 |只看作者 |坛友微信交流群
自己顶

使用道具

板凳
yangdelong1988 发表于 2016-12-13 15:13:08 |只看作者 |坛友微信交流群
是两个表的话,需要两个表关联生成笛卡尔积,然后用find函数看是否每一条记录是否城市在名称中,如A表有XX公司,B表有北京、天津,关联后的结果是XX公司,北京;XX公司,天津
data text;
input name:$20. city:$10.;
datalines;
重庆大龙有限公司 重庆
天津大龙有限公司 重庆
;
run;

data text;
set text;
index=index(name,trim(city));
if index>0 then where=city;
run;

使用道具

报纸
liuliuqiu 发表于 2016-12-13 15:22:28 |只看作者 |坛友微信交流群
yangdelong1988 发表于 2016-12-13 15:13
是两个表的话,需要两个表关联生成笛卡尔积,然后用find函数看是否每一条记录是否城市在名称中,如A表有XX公 ...
你好,感谢!我这是两个数据集,做出的结果不大对呀

使用道具

地板
zwnSAS121 发表于 2017-1-18 21:35:39 |只看作者 |坛友微信交流群
  1. /*简化程序:更容易理解*/
  2. /*找name(企业名称)中是否含有city(市县名称),
  3. 如果有,返回市县名称,如果没有,则不显示*/
  4. /*多表查询语法: Select one.var1 two.var2 from one as a,two as b where ....*/
  5. proc sql;
  6. create table test as
  7. select company.Name,
  8.        allcity.City
  9. from   company as a,
  10.        allcity as b
  11. where find(trim(a.Name), trim(b.City),'i') gt 0
  12. ;
  13. quit;

  14. /*两个表左联查询*/
  15. proc sql;
  16. create table test1 as /*注:test1和company两个表观测一致*/
  17. select
  18. a.name,
  19. b.name,
  20. b.city
  21.      from company as a
  22. left join test    as b
  23. on a.name=b.name
  24. ;
  25. quit;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
liuliuqiu + 5 + 3 + 3 + 3 热心帮助其他会员

总评分: 论坛币 + 5  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 01:46