目录
前言
Jupyter notebook 的布局是:注释、代码、运行结果可以错落布置的。一方面,我们一眼就可以看到各个代码对应的运行结果;另一方面,我们可以详细且优雅地给代码做备注。这样一来,我们理解代码、debug、探索数据与算法、优化流程与思路都可以更清晰明了。
目前 SAS 要是可以借助 jupyter notebook 去展示代码的话,我的数据汇报肯定会改善。此外,我的代码的可读性和管理上会不会改善?如果会,利用 jupyter notebook 带来的价值就更高了。我想就此试一试。这个尝试,从实现 jupyter noterbook 和 SAS 的交互开始。
一、如何在 jupyter notebook 上用 SAS
1. 软件与环境布置
以下操作均可参考Gitbub链接;此外,这个中本版链接也帮了我很多。
(1) 安装 SAS 9.4 与 Anaconda
要在 jupyter notebook 上使用 SAS,需要以下三个软件:
- 首先需要 SAS 9.4 的软件
- 然后需要 python 3 作为编译桥梁
- 最后在 jupyter notebook 去做最终显示
SAS 9.4 我之前已经安装了。对于后面二者,我直接安装了 Anaconda 并做好相关的环境设置,此时已经实现了 jupyter notebook 对 python 3 的正常使用。
(2) 下载 SAS kernel
准备好基本软件之后,我需要第二步:在 Anaconda - jupyter notebook 上把 SAS 连接进来。按着教程,我打开了 Anaconda Prompt,输入了以下命令行,就完成了下载。注意不要拼错哈,我第一次拼成了 kernal,导致无谓地纠错了很久。
pip install sas_kernel
(3) 检查 SAS kernel 是否成功下载
在完成 pip 之后,就直接在该 cmd 窗口进一步输出:
jupyter kernelspec list
正常 pip 安装了的话,就会输出类似以下的内容:
Available kernels:
python3 /opt/Anaconda3-2.5.0/lib/python3.5/site-packages/ipykernel/resources
sas /usr/local/share/jupyter/kernels/sas
(4) 调整 sascfg.py 的参数
首先找到 sascfg.py 这个文件。一般是在Anaconda的安装目录下。当然还可以通过pip show saspy
或者pip3 show saspy
这样的命令去找到路径。我的具体位置是
C:\Nana\ProgramFiles\anaconda\Lib\site-packages\saspy\sascfg.py
找到文件后要进行参数修改。我参考的是中文版链接里的内容。
- 找到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(该变量是代码定义的,classpath winlocal)包含了SAS中众多Jar包的路径。在此处,需要将cpW变量中的SAS安装目录和Jar包的路径修改为自己电脑实际的路径。
注:此处需严格按照自己电脑的SAS安装目录和Anaconda的安装目录来修改。只是修改路径,Jar包的文件名不需要修改。 - 紧接着将winlocal连接方式中的参数“encoding”的值修改为“euc-cn”。因为这是SAS在Windows下的默认编码方式。如果编码方式不对,中文会出现乱码。修改后如下所示:
(5)设置环境变量
打开系统环境变量设置,在系统的PATH环境变量中增加“sspiauth.dll”文件所在的路径,设置后要记得重启使之生效。我的路径为:
C:\Nana\Program Files\SAS\SASFoundation\9.4\core\sasext
2. 基本布置后的调试
(1)第一轮调试
根据教程,到这儿配置结束,然后就可以打开 jupyter notebook 用 SAS 去写代码了。注意新建代码的时候选择 SAS,而不是 python 3。不过我的测试出了如下报错:
Java Error:
Error: could not open `C:\Nana\Program Files\JRE\lib\amd64\jvm.cfg'
Subprocess failed to start. Double check your settings in sascfg_personal.py file.
Attempted to run program java with the following parameters:['java', '-classpath', '...路径略...', 'pyiom.saspy2j', '-host', 'localhost', '-stdinport', '2091', '-stdoutport', '2092', '-stderrport', '2093', '-zero', '-lrecl', '1048576', '']
If no Java Error above, try running the following command (where saspy is running) manually to see if it's a problem starting Java:
java -classpath "...路径略..." pyiom.saspy2j -host localhost -stdinport 2091 -stdoutport 2092 -stderrport 2093 -zero -lrecl 1048576
No SAS process attached. SAS process has terminated unexpectedly.
我去查了一下,说出现这种 Error 可能是由于先前有安装老版本jdk,之后将新版本jdk直接复制替换导致的。解决办法是:从控制面板中找到卸载程序 java 卸载,重新安装。对于 Java 的安装,我参考了文章:Java怎么安装?。
(2)第二轮调试
更新了 Java 之后,我运行 SAS 代码不再有报错。但是新的问题出现了:notebook 的界面上一直显示 “kernel busy”,“In[ ]” 内一直显示 * 号。对此我做了搜索,但是没有找到合适的回答。我换用 python 的代码就还是正常运行。
对于这个问题我现在无从下手。。。有知道的小伙伴可以帮忙解答吗?我去人大经济论坛发了一个问题,等看能不能有解答。