SAS JMP9和IML/Studio3.2开始兼容R

SAS公司产品JMP9和IML/Studio3.2开始兼容R,  注意不是SAS系统。

2010.10.8日Rick Wicklin在他博客中提到在SAS公司的独立模块IML/Studio3.2(可以调用SAS IML模块和使用IMPLUS语言),用IMLPLUS语言(非SAS原系统语言,在IML模块语言上进行了扩展)也可以调用R语句,当然前提是你要两者都安装了。继IML/stuidio模块开始兼容R以后,2010.10.18日,SAS公司新推出的另一个工业界颇有建树的JMP9也可以调用R软件。

也许SAS公司推出个兼容功能好像没什么大不了的,可是要知道很多人一直把R作为SAS的假想敌,R软件是开源的,免费,而SAS软件所属的SAS公司是地地道道的私人公司,钱多的懒得上市。这两个软件主要的基本功能是进行统计分析,两者有一定的可替代性,当然各有所长的地方。既然是同类软件,必然有相互竞争的地方,两边的粉丝一直都有口水战,不过2009年有一次小高潮,见胡江堂的R与SAS之争一文。公共媒体《纽约时报》的一记者Ashlee Vance发文Data Analysts Captivated by R’s Power,激起了R和SAS铁粉所在社区的狂热口水战。这是统计软件史上第一次粉丝大PK,非常激烈。当然激烈程度比不上这几天的360与QQ之间的PK(两者有本质区别:一个是主动热情,一个是被动郁闷),毕竟统计只是属于一小部分人的领域,寂寞的统计程序员们难得被关注一次,自然非常主动热烈的。 至此高潮发生在国外,国内SAS或R粉还是很平静,不过胡兄在2010年4月18日又发一文Think SAS(一),这一思考不要紧,立马引来国内外认识中文的SAS或R粉们的热烈讨论,跟贴里面著名ID频现,很多IP来自国外,这个也算是国内发生的第一次SAS粉与R粉们的大型带高潮的PK把。不过在R都PK,冲突难免,部分意见不堪阅读。

国外那次PK中,当时就有一派的意见就是将两者融合,谁融合谁?肯定是SAS融合R,这明摆这的。但是会不会融合,什么时候融合?这是个问题。只是粉丝提出来,SAS公司没有回答。不知道是什么原因,今年SAS公司将另两个独立的软件JMP和IML/Studio最新版本纷纷兼容R, JMP和IML/studio差不多算是SAS公司的冷门角色(JMP可能普及多一些),因此这功能受关注度不多,SAS粉集中地SAS-L邮件列表没什么讨论,只有一个卖R课程广告的,大家都很平静,应该是影响不大。虽然JMP和IML Studio为SAS和R之间搭起了一座桥梁,但是毕竟要过桥,终归是间接的。为什么SAS公司不直接补丁一个兼容R的呢?是不是在即将发行的SAS9.3或者SAS10里面发布这个功能呢? 技术上SAS兼容R,没有问题;R兼容SAS,就有问题。要不要融合,什么时候,完全看SAS公司的决策了。这次在所出两个新版本的独立软件中融合R,是否为了探路,还是广告下这个两个不广为人知的软件,这个不可得知,也没有相关消息放出。

我个人认为很有可能,也许9.3或10里面就可以直接调用R了 。IML/studio,JMP是两个不错的软件,这两个我使用过,我对IML模块和JMP都很有好感。既然这样,我就这里学习下怎么在SAS产品(非SAS系统)下使用R把。
1,JMP9(点击进入软件下载页面)中怎么使用R :

用JMP脚本语言(JSL)来调用R,我感觉JSL和R风格相似,这样使用起来更是有融合的感觉。在这里可以看看下面的例子(来自Using JMP 9 and R together)。基本上就是用JSL语句套住全部的R语句,然后绘图啊,统计啊,一键搞定。

rconn = R Connect();
rconn << Submit(“\[library(boot)# Load Boot package
library(boot) RStatFctn <- function(x,d) {return(mean(x[d]))}
b.basic = matrix(data=NA, nrow=1000, ncol=2)
b.normal = matrix(data=NA, nrow=1000, ncol=2)
b.percent =matrix(data=NA, nrow=1000, ncol=2)
b.bca =matrix(data=NA, nrow=1000, ncol=2)

for(i in 1:1000){
rnormdat = rnorm(30,0,1)
b <- boot(rnormdat, RStatFctn, R = 1000)
b.ci=boot.ci(b, conf =095,type=c(“basic”,”norm”,”perc”,”bca”)) b.basic[i,] = b.ci$basic[,4:5]
b.normal[i,] = b.ci$normal[,2:3]
b.percent[i,] = b.ci$percent[,4:5]
b.bca[i,] = b.ci$bca[,4:5]
}
]\”));
b_basic= rconn << Get(b.basic);
b_normal = rconn << Get(b.normal);
b_percent= rconn << Get(b.percent);
b_bca = rconn << Get(b.bca);
rconn << Disconnect();

2, IML Stuido3.2(点击进入软件下载页面)中怎么使用R:
用纯IML代码调用R的例子:
/* Comparison of matrix operations in IML and R */
print "---------- SAS/IML Results -----------------";
x = 1:3; /* vector of sequence 1,2,3 */
m = {1 2 3, 4 5 6, 7 8 9}; /* 3x3 matrix */
q = m * t(x); /* matrix multiplication */
print q;
print "------------- R Results --------------------";
submit / R;
rx <- matrix( 1:3, nrow=1) # vector of sequence 1,2,3
rm <- matrix( 1:9, nrow=3, byrow=TRUE) # 3x3 matrix
rq <- rm %*% t(rx) # matrix multiplication
print(rq)
endsubmit;

当然我们也可以IML的扩展语言IMLPLUS来调用R,
declare DataObject dobj;
dobj = DataObject.CreateFromFile("Hurricanes");
dobj.GetVarData( "wind_kts", w ); /* Step 1 */
dobj.GetVarData( "min_pressure", p );
/* send matrices to R */
run ExportMatrixToR( w, "Wind" ); /* Step 2 */
run ExportMatrixToR( p, "Pressure" );
print "-------------- In R ---------------"; /* Step 3 */
submit / R;
Model <- lm(Wind~Pressure, na.action="na.exclude") # 3a
ParamEst <- coef(Model) # 3b
Pred <- fitted(Model)
Resid <- residuals(Model)
print (ParamEst) # 3c
endsubmit;
print "----------- In SAS/IML -------------";
run ImportMatrixFromR( pe, "ParamEst" ); /* Step 4 */
print pe[r={"Intercept" "min_pressure"}];
/* add variables to the DataObject */
dobj.AddVarFromR( "R_Pred", "Pred" ); /* Step 5 */
dobj.AddVarFromR( "R_Resid", "Resid" );
ScatterPlot.Create(dobj, "min_pressure", "R_Resid");

另外我们还可以在studio里面进行SAS和R的数据结构转换,数据转移,调用R包进行画图等等,详细细节具体见Calling Functions in the R Language


2010年11月25日重要补充

SAS公司上星期推出的新版本SAS 9.22中的模块SAS/IML可以直接调用R语句了。兼容干脆就兼到底,难道是出于商业考虑,IML模块很贵么?为什么不直接来个SAS/R,难道会在SAS9.3里面出现吗?


comments by mvgilliland:
A key benefit of R is that it provides near-instant availability of new and experimental methods created by its user base — without waiting for the development/release cycle of commercial software. SAS recognizes the value of R to our customer base, and now makes it easy for SAS users to utilize R from within the SAS environment.

In 2009 SAS integrated R with SAS/IML Studio, which enables SAS users to access R functions and packages.

In September’s release of JMP 9 software (jmp.com), new integration with R enables users to leverage JMP’s interactive graphics to display analytic results. The new integration also lets JMP programmers build user interfaces that combine the power of JMP with experimental methods available in R.

In last week’s release of SAS/IML 9.22, R integration is extended to the SAS server environment – enabling users to deploy results in batch mode and access R from SAS on additional platforms, such as Linux.

Rick Wicklin’s new book “Statistical Programming with SAS/IML Software” (https://support.sas.com/pubscat/bookdetails.jsp?pc=63119)

可参考:http://support.sas.com/documentation/cdl/en/whatsnew/62580/HTML/default/viewer.htm#imlugwhatsnew922.htm


相关博文

发表评论

电子邮件地址不会被公开。 必填项已用*标注