Следующие коды - то, о чем я думал, это довольно медленно, какие-либо предложения? Спасибо!
Подробности в том, что сначала создайте набор данных в proc iml
с использованием кода R, затем перенесите его в обычный оператор SAS proc mixed
для его анализа, затем используйте proc append
для сохранения результатов, а затем повторите процесс 10000 раз.
proc iml;
do i= 1 to 100000;
submit / R;
library(mvtnorm)
library(dplyr)
library(tidyr)
beta <- matrix(1:50, byrow = TRUE,10,5)
sigma <- matrix(1:25, 5)
sigma [lower.tri(sigma )] = t(sigma )[lower.tri(sigma )]
sample <- t(apply(beta, 1, function(m) rmvnorm(1, mean=m, sigma=sigma)))
Group = rep(factor(LETTERS[1:2]),each=5,1)
sample <- cbind(sample,Group,c(1:5))
concat <- function(x) paste0('Visit', x[, 2], 'Time', x[, 1])
cnames <- c(paste0("Time", 1:5),"Group","ID")
colnames(sample) <- cnames
sample <- data.frame(sample)
sample <- gather(sample, Visit, Response, paste0("Time", 1:5), factor_key=TRUE)
endsubmit;
call ImportDataSetFromR( "rdata", "sample" );
submit;
Proc mixed data=rdata;
ods select none;
class Group Visit ID;
model Response = Visit|Group;
repeated Visit/ subject=ID type=un;
ods output Tests3=Test;
run;
proc append data=Test base=result force ;
run;
ENDSUBMIT;
end;
Quit;
proc print data=result;
run;