0%

SAS-IML配置

SAS 系统全称为 Statistics Analysis System,最早由北卡罗来纳大学的两位生物统计学研究生编制,并于 1976 年成立了 SAS 软件研究所,正式推出了 SAS 软件。经过多年的发展,SAS 已被全世界 120 多个国家和地区的近三万家机构所采用,直接用户则超过三百万人,遍及金融、医药卫生、生产、运输、通讯、政府和教育科研等领域。

SAS在读书那会就听说了,但是由于其极其贵。。而且在学术界用的似乎并不广?所以也就没接触过了。

刚好最近需要使用SAS的IML模块了,主要该模块支持R以及矩阵运算!!!有些代码的编写可以用到之前的R的基础了。因此简单做个记录,如何配置SAS/IML模块


在 BASE SAS 的基础上,还可以增加如下不同的模块而增加不同的功 能:SAS/STAT(统计分析模块)、SAS/GRAPH(绘图模块)、SAS/QC(质量控制模块) 、SAS/ETS(经济计量学和时间序列分析模块)、SAS/OR(运筹学模块)、SAS/IML(交互式矩阵程序设计语言模块)、SAS/FSP(快速数据处理的交互式菜单系统模块)、SAS/AF(交互式全屏幕软件应用系统模块)等等

其他模块在此不做介绍了(我也没搞清楚。。。),对于IML模块,在购买SAS时是需要额外付费的;因此在安装完base SAS后,其矩阵运算的功能是可以正常使用的,比如:

proc iml;
    a={1 2, 3 4};
    b={0 2, 1 1};
    c = a#b;
    d = a*b;
    print c,d;
quit;
SAS_IML

如果想要在IML模块中调用R代码,则需要对其做些配置才行,首先安装R软件(这个当然必须要安装),至于R版本的选择可以参考:What versions of R are supported by SAS?

从中可看出R版本的可选范围是跟着IML版本而定的,可用以下代码来确定当前安装的IML版本

/*List all SAS modules*/
proc product_status;
run;

比如我的IML是15.2,所以应该是能装3.6.3的;PS.其实能装4.x.x,但是好似对R最新版本支持不太友好,所以装3.6.3吧

安装好R软件后,将其加入系统的环境变量,接着运行一下代码确认下RLANG是否打开

PROC OPTIONS OPTION=RLANG;
RUN;

如果log中提示RLANG Support access to R language interfaces,说明没啥问题了,可以正常调用R代码了;但是通常情况下,其会提示NORLANG Do not support access to R language interfaces

以上提示是告诉我们需要将-RLANG加到SAS配置文件中,因此我们需要打开C:\Program Files\SASHome\SASFoundation\9.4\sasv9.cfg文件,第一行加入以下配置:

-RLANG
-SET R_HOME "C:\Program Files\R\R-3.6.3"

注意:上述配置需要写在文件中已有配置行-config "C:\Program Files\SASHome\SASFoundation\9.4\nls\zh\sasv9.cfg"的上方

重启SAS进程,然后再试下:

PROC OPTIONS OPTION=RLANG;
RUN;

理论上应该就提示能正常访问R语言了,用以下代码测试下R版本:

proc iml;
    submit/r;
    print(R.version)
    endsubmit;
quit;
SAS_IML2

接着测试下SAS和R数据格式的转化ExportDataSetToR,这个用于读取SAS格式数据并转化后用R函数处理;类似的方法还有很多,如ExportMatrixToR, ImportDataSetFromR, ImportMatrixFromR

proc iml;
    call ExportDataSetToR("Sashelp.Class", "class");
    submit / R;
    names(class)
    class
    endsubmit;
quit;

注:假如以上代码报错:ERROR: SAS is unable to transcode character data to the R encoding.,可能原因是:

  • 用了4.x.x版本的R软件,建议改成3.x.x版本的即可解决
  • R语言编码和SAS语言编码不同,比如我碰到的是:SAS是支持中文编码,但是R是英文编码,不支持中文,所以才报这个错误;将R改成中文编码的即可解决

最后吐槽下:SAS网上资料好少欸,而且都是在几年前的,google上很少搜到最新的。。。

参考资料:

Calling R Functions from SAS
Using R in the SAS System
SAS and R - stop choosing, start combining and get benefits!
SAS/IML User's Guide
What is the encoding problem when Calling R from Proc IML
What versions of R are supported by SAS?
Twelve advantages to calling R from the SAS/IML language
Usage Note 54806: Using R in the Open Source Integration node in SAS® Enterprise Miner(tm)
SAS调用R中的SMOTE方法
https://support.sas.com/kb/54/806.html

本文出自于http://www.bioinfo-scrounger.com转载请注明出处