在Jupyter Notebook中使用SAS

在Jupyter Notebook中使用SAS

Jupyter Notebook目前已成为绝大多数编程人员首选的工具。尤其是学习Python的朋友们,已非常习惯使用它了。我本人也是在学习Python的时候接触到这个工具,边学边做笔记是非常方便的,有关它的优点及功能本文就不再赘述了。作为一个SAS爱好者,也希望有这么一个Web端的工具来方便的写SAS代码、解决问题。

其实,这个问题SAS官方早就为广大SAS爱好者考虑了。早在2016年SAS官方在Github上就发起了开源项目来解决这一问题。经过1年多的广大贡献者的努力开发,目前Notebook已经基本可以和SAS无缝集成了。在Notebook中像使用Python一样来使用SAS。先来看一看运行SAS代码的效果:

废话不再多说,接下来就看如何来实现。以Windows操作系统为例进行说明,只需简单四步即可(Linux系统是类似的)。

第一步,环境准备

安装Anaconda集成环境和SAS软件,其中Anaconda要求Python3;SAS版本要求9.4。当然,你也可以分别安装Jupyter和Python3,但是建议直接安装Anaconda,会省去很多麻烦。也许你会疑惑,为什么需要Python3。这是因为Python在Jupyter Notebook和SAS之间起一个桥梁的作用,Jupyter Notebook中的SAS代码会交给Python,Python负责将代码传递给SAS执行;然后将执行的结果返回给Jupyter Notebook显示(Anaconda和SAS的安装此处就不在赘述)。

第二步,安装SAS_KERNEL

启动Anaconda Prompt,输入命令:

pip install sas_kernel

然后就会自动安装sas_kernel及其相应的依赖包。如下所示:

安装完成后可以输入命令:

jupyter kernelspec list

来检测sas_kernel是否安装成功:

第三部,修改配置文件

找到Anaconda的安装目录,打开sascfg.py文件所在的路径,例如我的路径:

D:\ProgramData\Anaconda3\Lib\site-packages\saspy\

在该路径下找到sascfg.py文件,该文件中需要配置连接SAS的信息。可以配置连接本地机器的SAS;也可以配置连接远程机器的SAS Server,无论是Linux Server还是Windows Server都可以。此处就以连接本地SAS为例进行说明。

打开该文件,首先是一大段注释;在这段注释后定义的第一个变量“SAS_config_names”用于指定连接SAS的配置方式,提供了8种方式:default、ssh、iomlinux、iomwin、winlocal、winiomlinux、winiomwin、http。默认为default方式。因为我们需要连接Windows机器本地的SAS,所以需要将SAS_config_names的值修改为“winlocal”。

修改前:

修改后:

接下来找到“winlocal”所在的位置,如下所示:

可以看到winlocal这种方式是通过Java来启动本地的SAS。其中参数classpath的取值cpW(该变量是上文定义的)包含了SAS中众多Jar包的路径,如上图所示。在此处,需要将cpW变量中的5个Jar包的路径修改为自己电脑实际的路径。修改完后如下所示:

注:此处需严格按照自己电脑的SAS安装目录和Anaconda的安装目录来修改。只是修改路径,Jar包的文件名不需要修改。

紧接着将winlocal连接方式中的参数“encoding”的值修改为“euc-cn”。因为这是SAS在Windows下的默认编码方式。如果编码方式不对,中文会出现乱码。修改后如下所示:

第四步,系统环境变量配置

打开系统环境变量设置,在系统的PATH环境变量中增加“sspiauth.dll”文件所在的路径。我个人电脑的路径为:

D:\Program Files\SASHome\SASFoundation\9.4\core\sasext

将其添加到PATH环境变量中,如下所示:

可直接搜索“sspiauth.dll”文件来找到自己电脑对应的路径。

至此,配置就基本结束了。接下来,赶紧启动Notebook来进行测试。打开Notebook后,单击New,就可以看到新建SAS程序的选项:

新建一个SAS的Notebook,输入代码进行测试:

注:如果出现问题,请看文末的错误处理。

这样就可以在Notebook中写SAS代码了,跟Python一样,同样有代码提示、语法高亮的功能。或许你可能注意到了,过程步的结果显示了,运行的日志去哪里了?

如果代码运行错误或者没有输出(例如纯DATA步)的话,那么输出就是日志信息。如下:

这样的功能基本上够用了,但是,能够正确运行且有输出结果的代码就不会显示日志了。

扩展:安装SAS日志组件

如果想要像SAS Base一样,随时查看所有程序运行的日志结果也没问题。安装一个Notebook的SAS日志扩展组件就可以了。打开Anaconda Prompt,输入以下命令安装:

jupyter nbextension install --py sas_kernel.showSASLog

运行完毕后,输入以下命令启用SAS日志组件:

jupyter nbextension enable sas_kernel.showSASLog –py

接下来重新启动Jupyter Notebook,并打开一个notebook。可以看到工具栏右侧多了两个工具按钮:

其中左边的工具栏按钮为显示最后一次运行的Cell中SAS代码对应的日志信息;右边的按钮为显示当前notebook所有的SAS代码执行的日志信息。如下:

显示Cell中SAS代码执行的日志:

显示所有的日志信息:

如此一来,该有的功能都有了,就可以在Notebook中像使用Python一样使用SAS了。

错误处理

如果你按照四个步骤配置完成后,运行SAS代码时出现以下错误:

那么说明是本地计算机的Java环境有问题,要么重新安装Java,并配置Java的环境变量;要么直接在sascfg.py配置文件中将Java的路径定义为SAS 9.4私有的Java环境。例如,我电脑的路径如下:

D:\Program Files\SASHome\SASFoundation\9.4\core\sasext

修改完如下所示:

注:路径中要用双斜杠。

修改完保存后,重启Jupyter Notebook就可以解决问题了。

扩展:连接SAS Server

如果需要配置连接远程的SAS Server,如连接远程Windows机器的SAS Server,需在sascfg.py中做以下修改:

将SAS_config_names的值改为“wintowin”;

在wintowin连接方式中将参数iomhost的值修改为远程Windows机器的IP地址;将参数encoding的值修改为euc-cn;

将cpW中5个Jar包的路径修改为远程Windows机器中SAS对应的目录。

修改完毕后,启动Notebook,首次运行SAS代码时,会提示输入访问SAS Server的有效SAS用户和密码。如下所示:

有关SAS_KERNEL及相关SAS开源项目的更多说明,请参见Github项目:https://github.com/sassoftware/sas_kernel

题外话

其实,从SAS 9.4开始就有了SAS Studio这个Web端的工具产品,整个界面布局及功能跟EG是类似的,相当于一个Web端的EG。使用起来也是很方便的。

本次的分享到这就结束了,希望能给各位提供一点帮助。更多内容,请持续关注SAS中文论坛——“SAS岩论系列”(虽然,已经很久没有更新了)。

更多SAS岩论系列文章

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180123B04S9400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券