SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2250|回复: 0
打印 上一主题 下一主题

浅谈SAS 9.3新特性之PROC GROOVY

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2013-1-1 11:20:23 | 只看该作者

浅谈SAS 9.3新特性之PROC GROOVY

在2013年元旦,心血来潮翻了下proc groovy,想与大家分享下,希望能够抛砖引玉。

Groovy是一个基于Java虚拟机的敏捷动态语言。它构建在强大的Java语言之上 并添加了从Python,Ruby和Smalltalk等语言中学到的诸多特征,为Java开发者提供了现代最流行的编程语言特性,而且学习成本很低(几乎为零)。Groovy支持DSL(Domain Specific Languages领域定义语言)和其它简洁的语法,让你的代码变得易于阅读和维护。Groovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建Shell Scripts变的非常简单。在开发Web,GUI,数据库或控制台程序时 通过减少框架性代码大大提高了开发者的效率。它支持单元测试和模拟(对象),可以简化测试;无缝集成 所有已经存在的 Java对象和类库;直接编译成Java字节码,这样可以在任何使用Java的地方使用Groovy。
<!-- m --><a class="postlink" href="http://groovy.codehaus.org/">http://groovy.codehaus.org/</a><!-- m -->

SAS在9.3版本中开始支持Groovy,我个人觉得的确是个进步。SAS面向过程的编程方式一直被许多Java和C的程序员所诟病,无法像面向对象编程方式那样提供强大而丰富的类库实现复杂逻辑的大规模重用。但是SAS语言已经发展的这一步了,不可能重构,否则又需要一个很长的开发和学习的过程,代价实在太大。所以最可行的方法就是增加与其他语言的接口。SAS Intergation Technology模块就是干这个事情的,它提供了对于VB,C和Java等等语言的接口,但是要收费。这次的PROC GROOVY是在SAS Base模块下的新过程步,应该是包含在Base模块许可证中的功能,所以应该是“免费”的。有了PROC GROOVY就可以利用Groovy面向对象的特征,轻松实现类的编写重构,编译存储和调用重用。甚至还可以直接使用外部现成的Groovy类,帮助你实现字符串和数据等的复杂逻辑处理。SAS本身的PROC GROOVY就是一个接口,没有太多的花头,我们所要做的工作就是需要学习下Groovy语言的编程。不过只要你有Java编程的经验,这个学习过程需要花费的代价基本是零。但是SAS为什么选择Groovy语言,我还是不知道。

PROC GROOVY的使用语法非常简单,可以参考 <!-- m --><a class="postlink" href="http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n12njw2j3tuptnn1bmmr0cl857d2.htm">http://support.sas.com/documentation/cd ... l857d2.htm</a><!-- m -->
[code:qaeurkkh]PROC GROOVY &lt;classpath options&gt;;
ADD classpath options;
EVALUATE &lt;(LOAD | PARSEONLY | NORUN)&gt; “Groovy statement string” &lt;arguments&gt;;
EXECUTE &lt;(LOAD | PARSEONLY | NORUN)&gt; Groovy file name | fileref &lt;arguments&gt;;
SUBMIT &lt;(LOAD | PARSEONLY | NORUN)&gt; &lt;arguments&gt;;
Groovy statements
ENDSUBMIT;
CLEAR;
QUIT;[/code:qaeurkkh]

我始终认为最好的学习方式就是看实例,所以我讲个Hello World的例子,简单看一下PROC GROOVY编程。
[code:qaeurkkh]proc groovy classpath=cp;
  submit parseonly;
    class Greet {
      def name
      Greet(who) { name = who&#91;0&#93;&#46;toUpperCase() +
                      who&#91;1&#46;&#46;-1&#93; }
      def salute() { println &quot;Hello $name!&quot; }
      }
  endsubmit;
quit;

proc groovy classpath=cp;
  eval &quot;g = new Greet(&quot;&quot;world&quot;&quot;); g&#46;salute()&quot;;
quit;[/code:qaeurkkh]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-2 18:42 , Processed in 0.067329 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表