楼主: Celsius256
6386 18

关于proc sql中通配符的问题想各位大神请教 [推广有奖]

  • 0关注
  • 1粉丝

本科生

10%

还不是VIP/贵宾

-

威望
0
论坛币
1477 个
通用积分
0.0756
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2872 点
帖子
40
精华
0
在线时间
99 小时
注册时间
2014-5-22
最后登录
2021-9-20

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在proc sql 中,sql语句中的 [] 通配符好像不起作用

比方说
proc sql;
create table test
        as select *
        from ABC
        where x like '[B-C]%';
quit;


运行后无错误提示,但是无法实现sql中[]通配符的实现

请教各位大神,如何在proc sql 中实现[]这样的通配符功能?万分感谢!急急急!


————————————————————————————————————比如下面的代码,想实现的是将a表中开头为B到J的数据提取出来,但在proc sql中where x like '[B-J]%'被认为是筛选以[B-J]开头的数据,而不是筛选B到J开头的数据。这与SQL中不一样。
  1. data a;
  2. input x $;
  3. cards;
  4. B120922
  5. C239878
  6. C278392
  7. E783986
  8. D094893
  9. T984892
  10. R094909
  11. D894729
  12. H849303
  13. A783020
  14. ;
  15. run;
  16. proc sql;
  17. create table b
  18.         as select *
  19.         from a
  20.         where x like '[B-J]%';
  21. quit;
复制代码
——————————————————————————————————————————————————————具体问题如下

产品
料件编码
A产品
7213-7215,7221,72221-72223,7227,72281-72286,72288


比方说,我要处理的是一个各种产品与料件编码对应的参数表。上表的含义是,A产品是指对应8位料件编码前几位为表中范围的产品。这个参数表包含的产品很多且需要经常维护。

如何根据上面的参数表转换为根据料件编码的范围筛选不同种类产品?我不知道语句在SAS如何实现。

如果sql中的[]通配符可以使用的话,则对表中逗号进行替换为  ]%' OR x like '[  ,然后在将替换后的条件在宏中加以引用就可以了。但现在[]通配符在SAS中实现不了,我就不知道应该如何处理了。

不知道SAS中是不是有更简便的语句来直接实现?万分感谢!




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:proc sql sql ROC 通配符 Select 通配符

沙发
mingfeng07 学生认证  发表于 2015-2-7 18:27:21 |只看作者 |坛友微信交流群
调试了一下,没有问题。
  1. data a;
  2. input x $;
  3. cards;
  4. [B-C]de
  5. ef
  6. [B-C]ege
  7. ;
  8. run;
  9. proc sql;
  10. create table b
  11.         as select *
  12.         from a
  13.         where x like '[B-C]%';
  14. quit;
复制代码

使用道具

藤椅
Celsius256 发表于 2015-2-7 18:49:54 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-2-7 18:27
调试了一下,没有问题。
谢谢,但sql中[]通配符的作用如下

通配符描述
%替代一个或多个字符
_仅替代一个字符
[charlist]字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

例子

我们希望表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM PersonsWHERE City LIKE '[ALN]%'

使用道具

板凳
mingfeng07 学生认证  发表于 2015-2-7 19:21:03 |只看作者 |坛友微信交流群
Celsius256 发表于 2015-2-7 18:49
谢谢,但sql中[]通配符的作用如下
可以这么写:
  1. proc sql;
  2. create table b
  3.         as select *
  4.         from a
  5.         where 'B'<=substr(x,1,1)<='J';
  6. quit;
复制代码

使用道具

报纸
Celsius256 发表于 2015-2-7 19:46:32 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-2-7 19:21
可以这么写:
substr()需要制定起始点和字符宽度,但我要处理的数据是大批量的,且需要匹配的字符宽度是不一样的。

使用道具

地板
mingfeng07 学生认证  发表于 2015-2-7 19:55:37 |只看作者 |坛友微信交流群
Celsius256 发表于 2015-2-7 19:46
substr()需要制定起始点和字符宽度,但我要处理的数据是大批量的,且需要匹配的字符宽度是不一样的。
我这代码只对应于你一楼问题,如果有别的要求,可以贴出来看看。

使用道具

7
sushe1527 发表于 2015-2-7 19:56:15 |只看作者 |坛友微信交流群
Celsius256 发表于 2015-2-7 19:46
substr()需要制定起始点和字符宽度,但我要处理的数据是大批量的,且需要匹配的字符宽度是不一样的。
即便你这个‘[B-J]’% 调试成功了,匹配字符宽度不一样 也是不能通用啊

使用道具

8
Celsius256 发表于 2015-2-7 19:58:40 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-2-7 19:21
可以这么写:
产品

料件编码

A产品

7213-7215,7221,72221-72223,7227,72281-72286,72288



比方说,我要处理的是一个各种产品与料件编码对应的参数表。上表的含义是A产品是指对应8位料件编码前几位为表中范围的产品。这个参数表包含的产品很多且需要经常维护。

如何根据上面的参数表转换为根据料件编码的范围筛选不同种类产品?我不知道语句在SAS如何实现。

如果sql中的[]通配符可以使用的话,则对表中逗号进行替换为  ]%' OR x like '[  ,然后在将替换后的条件在宏中加以引用就可以了。但现在[]通配符在SAS中实现不了,我就不知道应该如何处理了。

不知道SAS中是不是有更简便的语句来直接实现?

使用道具

9
Celsius256 发表于 2015-2-7 20:04:17 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-2-7 19:55
我这代码只对应于你一楼问题,如果有别的要求,可以贴出来看看。
非常感谢,我把具体情形写了出来,请您看一下

使用道具

10
Celsius256 发表于 2015-2-7 20:04:49 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-2-7 19:56
即便你这个‘’% 调试成功了,匹配字符宽度不一样 也是不能通用啊
您好,我把具体情形写了出来,请您看一下,谢谢!

使用道具

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

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

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

GMT+8, 2024-5-1 21:42