Я упростил код, чтобы проиллюстрировать проблему:
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 с именами в зависимости от значения 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;`