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;
如果想要在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和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转载请注明出处