A001-1:如何使用 jupyter notebook 作为 SAS 的笔记本

目录

前言

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

找到文件后要进行参数修改。我参考的是中文版链接里的内容。

  1. 找到sascfg.py文件,该文件中需要配置连接SAS的信息。可以配置连接本地机器的SAS;也可以配置连接远程机器的SAS Server,无论是Linux Server还是Windows Server都可以。此处就以连接本地SAS为例进行说明。
  2. 打开该文件,首先是一大段注释;在这段注释后定义的第一个变量“SAS_config_names”用于指定连接SAS的配置方式,提供了8种方式:default、ssh、iomlinux、iomwin、winlocal、winiomlinux、winiomwin、http。默认为default方式。因为我们需要连接Windows机器本地的SAS,所以需要将SAS_config_names的值修改为“winlocal”。
  3. 接下来找到“winlocal”所在的位置。可以看到winlocal这种方式是通过Java来启动本地的SAS。其中参数classpath的取值cpW(该变量是代码定义的,classpath winlocal)包含了SAS中众多Jar包的路径。在此处,需要将cpW变量中的SAS安装目录和Jar包的路径修改为自己电脑实际的路径。
    注:此处需严格按照自己电脑的SAS安装目录和Anaconda的安装目录来修改。只是修改路径,Jar包的文件名不需要修改。
  4. 紧接着将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 的代码就还是正常运行。
对于这个问题我现在无从下手。。。有知道的小伙伴可以帮忙解答吗?我去人大经济论坛发了一个问题,等看能不能有解答。

A001-1:如何使用 jupyter notebook 作为 SAS 的笔记本A001-1:如何使用 jupyter notebook 作为 SAS 的笔记本 nanahoro 发布了1 篇原创文章 · 获赞 0 · 访问量 29 私信 关注
上一篇:第一章 SAS软件入门


下一篇:第一节 SAS的数据读入思路及代码