我已经简化了代码来说明问题:
proc iml;
var=40;
call ExportMatrixToR(var, "var" );
submit / R;
sample<-sample(1:var, 50, replace=TRUE)
endsubmit;
call ImportDataSetFromR( "WORK.rdata", "sample" );
proc means data=rdata;
output out=a;
run;
如何更好地控制var
,例如,如果我想尝试不同的值var=(20,40,80,100,120...)
,如何像人们在宏中轻松完成的那样完成?
请注意,rdata
从 R 传输到 SAS 进行分析,因此我们可能需要在 R 中创建不同的 data.frames,其名称取决于var
。有更简单的方法吗?
*******更新********
威克林博士,我桌上有你的书,太棒了。非常感谢您花时间回答这个问题。
我试过你的代码,它工作得很好,但我忘了提到我的模拟数据有一个字符变量。提交的 R 代码如下所示:
submit Ni / R;
sample<-sample(1:&Ni, 50, replace=TRUE)
group<-rep(LETTERS[1:2],25)
df<-data.frame(sample, group)
endsubmit;
我试图解决您的代码以适应此功能,但 SAS 日志一直说“变量组的类型与数据集不一致”。你能帮忙吗?
*******更新2**************
proc iml;
N = do(20, 120, 20);
ID = 1; sample = .; group="";
create rdata var {ID "sample" "group"}; /* open data set for writing */
do i = 1 to ncol(N);
Ni = N[i]; /* get the i_th parameter; pass in on the SUBMIT statement */
submit Ni / R;
sample<-sample(1:&Ni, 50, replace=TRUE)
group<-rep(LETTERS[1:2],25)
endsubmit;
call ImportMatrixFromR(sample, "sample");
call ImportMatrixFromR(group, "group");
ID = j(nrow(sample), 1, i); /* also save ID variable */
append; /* write IML data to SAS data set */
end;
close rdata;
quit;
proc means data=rdata;
by ID; /* analyze all the results in a single call */
output out=a;
run;`