a***d 发帖数: 336 | 1 需要在proc IML里用一个 1 到3000000的do loop。
每个loop里要给一个15000000*1的vector的几个element赋值。
跑一次要挺长时间。问题是这个loop是用来算loglikelihood的,
要被下面optimize的routine 反复的call。请教大家怎么能让
这个do loop快一些。
在R里有sapply之类可以替代for loop,算起来快无数倍,sas里有
sapply这样的function么?
code如下:
proc IML;
/* write the log-likelihood function*/
start LogLik(param) global (datain);
igrp = datain[,5];*datain[,5] is group id
X = datain[,1:4]; *datain[,1:4] are independent variables
expXb = exp(X*param);
uniqIgrp = unique(igrp)`;
sumExpXb = j(nrow(X),1);
/*use do loop to compute sum(expXb) for each groups */
do i = 1 to nrow(uniqIgrp);
ii = LOC(igrp=uniqIgrp[i,]); /*by design, ii is size 1*5 */
sumExpXb[ii,] = sum(expXb[ii,]);
end;
f = expXb/sumExpXb;
return ( f );
finish;
quit; |
|