楼主: Celsius256
7067 18

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

11
sushe1527 发表于 2015-2-7 20:23:49
Celsius256 发表于 2015-2-7 19:58
比方说,我要处理的是一个各种产品与料件编码对应的参数表。上表的含义是A产品是指对应8位料件编码前 ...
是编码前两位是72的代表A产品?

12
Celsius256 发表于 2015-2-7 20:34:48
sushe1527 发表于 2015-2-7 20:23
是编码前两位是72的代表A产品?
7213-7215,7221,72221-72223,7227,72281-72286,72288


具体的含义
(编码前4位为7213至7215) 或者 (编码前4位为7221) 或者 (编码前5位为72221至72223) 或者 (编码前4位为7227) 或者 (编码前5位为72281至72286) 或者 (编码前5位为72288)


不知道您理解我的意思吗?

13
Celsius256 发表于 2015-2-7 20:35:35
mingfeng07 发表于 2015-2-7 19:55
我这代码只对应于你一楼问题,如果有别的要求,可以贴出来看看。
7213-7215,7221,72221-72223,7227,72281-72286,72288


具体的含义
(编码前4位为7213至7215) 或者 (编码前4位为7221) 或者 (编码前5位为72221至72223) 或者 (编码前4位为7227) 或者 (编码前5位为72281至72286) 或者 (编码前5位为72288)

14
mingfeng07 学生认证  发表于 2015-2-7 22:14:12
Celsius256 发表于 2015-2-7 20:35
7213-7215,7221,72221-72223,7227,72281-72286,72288
  1. proc sql;
  2. create table b as select * from a
  3.         where 7213<=input(substr(x,1,4),8.)<=7215 or input(substr(x,1,4),8.)=7221 or
  4.               input(substr(x,1,4),8.)=7227 or 72221<=input(substr(x,1,5),8.)<=72223
  5.               or 72281<=input(substr(x,1,5),8.)<=72286 or input(substr(x,1,5),8.)=72288;
  6. quit;
复制代码

15
Celsius256 发表于 2015-2-8 14:25:08
mingfeng07 发表于 2015-2-7 22:14
谢谢,但这种写法还是仅适用于这种具体情形,我面对的实际问题是有几百种产品与料件编码的对应关系,每种对应关系中料件范围都不同,如何批量的进行处理呢?真的还是没想到好办法,但仍然非常感谢!

16
mingfeng07 学生认证  发表于 2015-2-8 22:30:00
Celsius256 发表于 2015-2-8 14:25
谢谢,但这种写法还是仅适用于这种具体情形,我面对的实际问题是有几百种产品与料件编码的对应关系,每种 ...
想要批处理的话,必须有相同之处才行,可以自己建立个宏,把这些条件放在一个宏变量里,用宏循环来进行。

17
Celsius256 发表于 2015-2-11 14:55:54
mingfeng07 发表于 2015-2-8 22:30
想要批处理的话,必须有相同之处才行,可以自己建立个宏,把这些条件放在一个宏变量里,用宏循环来进行。
谢谢,通过substr()形式的宏循环好像不太好做,不过我发现在data步的where语句中,“7212”<=x<"7314"同样可以执行,这样在data步中我只需将7212-7314这种形式中的“-”短横线替换为”<=x<"就可以了。

18
只道是寻常plus 学生认证  发表于 2016-2-13 20:45:44
受教了,谢谢各位豪侠!

19
erbangzhu 发表于 2016-2-15 15:36:45
受教受教

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 08:37