全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5665 5
2011-11-01
我用一个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过程了,总的程序可能就不那么简洁了
请牛人指教,谢谢!

二维码

扫码加我 拉你入群

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

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

全部回复
2011-11-1 14:01:37
变量类型......scan出来是字符串
sql里可以用正则
要是我的话把scan出来的字符转转成日期把,这样需要控制文件范围的时候方便点
二维码

扫码加我 拉你入群

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

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

2011-11-1 14:10:52
学习一下、、、、
二维码

扫码加我 拉你入群

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

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

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

如果再进行后缀转成日期的话,可能要很多步才能解决了
再问下SQL中的正则如何做呢?谢谢!
二维码

扫码加我 拉你入群

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

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

2011-11-2 09:12:04
复制代码
我试了,这样可以,也就是,将字符转为数字型在data步做可以,放到sql的条件里是不行的,不知道对你有没有帮助
二维码

扫码加我 拉你入群

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

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

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码的吧,如果是这样的话,这么用就应该没有问题了
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群