Pozivanje R funkcija i programa iz SAS-a
Zadatak: Pokrenuti SAS sesiju i kreirati tabelu pod nazivom test sa varijablom x koja ima vrijednosti: 2, 48, 6, 9, 11, 100. Dalje, putem SAS/IML modula izvršiti sljedeće komande:
eksportovati SAS tabelu test u R data frame
test_r
;započeti izvršenje R komandi;
selektovati prvi red data framea
test_r
i tako kreirati novi data frameres_r
;dodati novu varijablu
avg_x
data frameures_r
izračunatu kao prosječnu vrijednost varijablex
iz data frameatest_r
;zaključiti izvršenje R komandi;
eksportovati R data frame
res_r
u SAS tabelu res.
SAS program:
/* kreirati tabelu test u radnoj biblioteci */
data test;
input x;
datalines;
2
48
6
9
11
100
;
run;
proc iml;
/* eksportovati SAS tabelu test u R data frame test_r */
call ExportDataSetToR("test", "test_r");
/* zapoceti izvrsenje R komandi */
submit / R;
res_r <- test_r[1, ]
res_r$avg_x <- mean(test_r$x)
#zakljuciti izvrsenje R komandi
endsubmit;
/* eksportovati data frame (res_r) generisan u R-u u SAS tabelu res */
call ImportDataSetFromR("res", "res_r");
quit;
Napomena: Da bi prethodni primjer mogao da se uspješno izvrši neophodno je prvo omogućiti pokretanje R-a unutar SAS sesije. Više informacija i detalja o tom procesu mogu se naći na ovom linku.
Zadatak: Sačuvati, u nastavku, dat R program (R_from_SAS.R
) i isti pozvati iz SAS sesije putem funkcije system.
R program:
#inicirati kolekciju argumenata
arg <- commandArgs(TRUE)
#izvdojiti prvi proslijedjeni argument: broj redova data framea
nr <- arg[1]
#izvdojiti drugi proslijedjeni argument: folder za eksport fajla
fp <- arg[2]
#kreirati data frame
db <- data.frame(x = 1:nr)
#eksportovati data frame u csv fajl
write.csv(db, file = paste0(fp, "db.csv"), row.names = FALSE)
Napomena: Kako bi zadatak bio uspješno riješen, neophodno je prilagoditi putanje do R exe fajla, putanju do sačuvanog R programa (R_from_SAS.R
) kao i putanju drugog sistemski proslijeđenog argumenta.
SAS sesija:
/* definisati putanju do R exe fajla */
%let prog = "C:\\Program Files\\R\\R-4.0.2\\bin\\i386\\Rscript.exe";
/* definisati putanju do R skripte */
%let scrp = "C:\\Users\\adjurovic\\Desktop\\R_from_SAS.R";
/* definisati argumente R skrpite */
%let args = 10 "C:\\Users\\adjurovic\\Desktop\\";
/* kreirati komandu za izvrsenje */
%let cmd = %unquote(%str(%'&prog. &scrp. &args.%'));
%put &cmd.;
data _null_;
call system(&cmd.);
run;
Last updated
Was this helpful?