楼主: playmore
5715 5

请问如何利用SQL选取含有特定字符的行 [推广有奖]

已卖:1645份资源

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16356 个
通用积分
8.6697
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1332 小时
注册时间
2007-1-11
最后登录
2025-12-1

初级学术勋章 初级热心勋章 中级热心勋章

楼主
playmore 发表于 2011-11-1 13:58:33 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我用一个getfileinfo的宏,读取了一个文件夹下的所有文件列表到SAS的表格
然后想用SQL挑选带有特定后缀文件名的行,用的是如下的代码:

proc sql noprint;
create table FileList as
  select *,monotonic() as _N_
   from FileList_temp
   where scan(FileName,-1,'.')='TXT' or
    scan(FileName,-1,'.')='CSV';
quit;

现在有个新任务,就是挑选后缀为YYYYMMDD型日期的文件,比如abc.20111020这样的
如果还是用上面的方法,该怎么写SQL中的Where子句呢

我先试着用了scan(FileName,-1,'.')>10000000 and scan(FileName,-1,'.')<20990000这样简单的方法
只是SAS报错说
ERROR: Expression using greater than (>) has components that are of different data types.
ERROR: Expression using less than  (<) has components that are of different data types.
所以想不到其他好的方法了

如果用正则的话,可能就用不到这个SQL过程了,总的程序可能就不那么简洁了
请牛人指教,谢谢!

二维码

扫码加我 拉你入群

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

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

关键词:sql Components Expression Different monotonic 如何

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

沙发
soporaeternus 发表于 2011-11-1 14:01:37
变量类型......scan出来是字符串
sql里可以用正则
要是我的话把scan出来的字符转转成日期把,这样需要控制文件范围的时候方便点
Let them be hard, but never unjust

藤椅
violetqueen 发表于 2011-11-1 14:10:52
学习一下、、、、

板凳
playmore 发表于 2011-11-1 14:16:46
soporaeternus 发表于 2011-11-1 14:01
变量类型......scan出来是字符串
sql里可以用正则
要是我的话把scan出来的字符转转成日期把,这样需要控制 ...
我其实想要从一个文件列表中选出部分文件,再生成一个新表
因此想一个SQL解决问题

如果再进行后缀转成日期的话,可能要很多步才能解决了
再问下SQL中的正则如何做呢?谢谢!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

报纸
cathy3212 发表于 2011-11-2 09:12:04
  1. data aa;
  2. input x $20.;
  3. cards;
  4. ab.20011230
  5. cde.20110814
  6. you.20050730
  7. me.20070228
  8. ;
  9. run;
  10. data bb;
  11. set aa;
  12. y=scan(x,-1)*1;
  13. run;
  14. proc sql;
  15. create table cc as select
  16. x
  17. from bb
  18. where 10000000 lt y lt 20090000
  19. ;quit;
复制代码
我试了,这样可以,也就是,将字符转为数字型在data步做可以,放到sql的条件里是不行的,不知道对你有没有帮助

地板
playmore 发表于 2011-11-2 09:16:46
cathy3212 发表于 2011-11-2 09:12
我试了,这样可以,也就是,将字符转为数字型在data步做可以,放到sql的条件里是不行的,不知道对你有没有帮 ...
多谢楼上几位
最后我把我在顶楼提到的SQL子句改了下
scan(FileName,-1,'.')>'10000000' and scan(FileName,-1,'.')<'20990000'
简单测试了下这样可以
我估计SAS里字符串的比较也应该是比ASCII码的吧,如果是这样的话,这么用就应该没有问题了
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 08:23