使用 R 代码在 Proc IML 中迭代模拟数据,然后在 SAS 过程中进行分析,这是一种更快的方法吗?

Using R code to simulate data iteratively in Proc IML and then analyze in SAS procedure, a faster way?

下面的代码是我想到的,有点慢,有什么建议吗?谢谢!

详细信息是首先使用 R 代码在 proc iml 中创建数据集,然后将其传输到常规 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;

不知道你在做什么所以这必须是一般的。

将循环移动到 R 代码中。留在 R 中生成 1 个大数据框,然后将其导入 SAS。遍历这些提交会更慢。调用 R、从 R(这是另一个 R 调用)导入数据,然后向 运行 您的 SAS 追加有必要的开销。将循环放入 R 中可以消除这种开销。

理想的方法是在 SAS/IML 中进行完整模拟,因为这样可以最大限度地减少 SAS 和 R 之间的数据传输。您可以 use the RANDNORMAL function to simulate multivariate normal data. Use the CREATE/APPEND statements to save the simulated samples to a SAS data set. Then call PROC MIXED and use a BY statement to analyze all the samples. See "Simulation in SAS," for the general ideas. No SUBMIT blocks are required. If you experience programming issues, consult the "Simulation" posts on The DO Loop blog, or if you intend to do a lot of simulation in SAS, you might want to find a copy of Simulating Data with SAS (Wicklin, 2013)

如果您对 SAS/IML 的了解还不足以 运行 模拟,则在 R 中生成所有 100,000 个样本(如果可能,进行矢量化)并生成一个 SampleID 变量来识别每个样本。然后将整个数据导入 SAS 并使用 BY 语句技巧进行分析。