写一段简单但又非常有用的Groovy程序,其实你只需要知道怎么样拼写它……引用自SAS GlobalForum2013 Paper493
最近被抓住干一个活,其实需求挺简单。就是一段程序是会指定在自己的项目文件夹当中读取特定的Excel表格。每次有新的项目文件夹生成的时候就需要再配套的准备好相应的程序和Excel表格。程序可以直接被搜索重用的,但是Excel表格不能。有人就觉得说这个很不makesense,就建议说把程序里面本来是动态引用的Excel表格的地方改写成静态的,直接读取一个固定地方的Excel表格。这样就不用一直copy了。这么改当然简单粗暴解决问题了,但是没有bige啊。。。就这样放到template里面别人也会吐槽的吧。
好吧,那想想有什么解决方案。放在一般的平台上比如UNIX,WIN其实SAS解决起来也很方便哈,直接在SAS数据步中调用系统的文档浏览命令然后把浏览的结果通过临时文件存储起来再通过SAS就可以很方便的揉捏了。
可是,我目前面对的是一个基于Linux用Groovy写的一个比较封闭的平台。上面的方法早就尝试过了,没有鸟用啊,系统总是说我没有权限操作。估计是把Linux的一些命令通过某种方法全部封住了。
万般无奈下尝试着google了下Groovy,咦,居然有人说这货是Java里的Python!
Groovy不会,Java不会,python正在学呀,哈哈哈,看来有戏。继续搜一搜,看到有一篇papaer很diao啊:“写一段简单但又非常有用的Groovy程序,其实你只需要知道怎么样拼写它“(有空的朋友们可以读一读哈)大致扫了一下,真的是想睡觉就有人递过来了枕头。原来SAS是可以支持执行Groovy,直接有一个proc groovy可以拿来用。Groovy的语法也跟Python很相近,这事情大概就成了!我一边这么想一边赶紧去上了个厕所,免得待会儿测试被俗务打扰。哈哈!
从paper里面知道:如果需要查找文件,应该用eachFile,如果需要迭代文件,应该用eachFileRecurse;
从stack flow里面学到,如果需要筛选迭代,可以在迭代后面加if条件语句。
从之前学的python里面套用循环可以用for语句,groovy里面应该也可以。
从SAS help里面找到procgroovy可以把相应的信息通过exports方法传给SAS。
东拼西凑就完成下面的语句啦。
因为我要找Excel文件,所以筛选条件里面使用了后缀名是.xlsx,另外需要在后续的SAS步骤当中使用这些抓到的信息,所以生成了一系列SAS宏变量。调试了一下,成功!太开心了。
总结
就像paper里面说的,SAS很强大,但是只是在某些方面。有时候处理特别的一些任务的时候还是使用一些别的方法会更简单。碰到问题多搜搜总是有帮助的,解决一个问题其实就是解决了一堆问题。编程语言大致都是近亲,学会一个别的知道语法规则就可以用起来了。
领取专属 10元无门槛券
私享最新 技术干货