原标题:SAS岩论 | 在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:ProgramDataAnaconda3Libsite-packagessaspy
在该路径下找到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 FilesSASHomeSASFoundation9.4coresasext
将其添加到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 FilesSASHomeSASFoundation9.4coresasext
修改完如下所示:
注:路径中要用双斜杠。
修改完保存后,重启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数据分析挖掘工作,担任过项目经理、技术顾问、培训讲师等职务,拥有丰富的项目实战经验。
剑指SAS,尽在今朝。欢迎各位技术达人交流,可以长按下面群二维码入SAS中文论坛微信群@Slash,也可以发邮件:slash.xin@hotmail.com。
更多SAS岩论系列文章返回搜狐,查看更多
责任编辑: