Pozivanje SAS programa iz R-a

Funkcijasystem predstavlja R funkciju za pozivanje i izvršenje sistemskih komandi i kao takva može se iskoristiti za izvršenje SAS programa.

Zadatak: Sačuvati, u nastavku, dati SAS program (SAS_from_R.sas) i isti pozvati iz R-a putem funkcije system.

SAS progam:

/* definisati makro varijable od sistemski proslijedjenih argumenata */
%let lib_path = %scan(&sysparm., 1, " ");
%let nrow = %scan(&sysparm., 2, " ");

/* definisati putanju do biblioteke */
libname wd "&lib_path.";

/* kreirati tabelu test */
data wd.test;
	do i = 1 to &nrow.;
		x = i;
		output;
	end;
	drop i;
run;

Napomena: Kako bi zadatak bio uspješno riješen, neophodno je prilagoditi putanje do SAS exe fajla, putanju do sačuvanog SAS programa (SAS_from_R.sas) kao i putanju prvog sistemski proslijeđenog argumenta.

R sesija:

> #definisati putanju do SAS exe fajla
> sas.exe <- "C:\\Program Files\\SASHome\\SASFoundation\\9.4\\sas.exe"
> #definisati putanju do SAS programa
> sas.prg <- "C:\\Users\\adjurovic\\Desktop\\SAS_from_R.sas"
> #definisati prvi argument: putanju do SAS biblioteke
> arg.1 <- "C:\\Users\\adjurovic\\Desktop\\"
> #deinisati drugi argument: broj redova tabele
> arg.2 <- 10
> 
> #definisati konacnu komandu za izvrsenje (cmd)
> exe.prg <- paste0(shQuote(sas.exe), " ", shQuote(sas.prg))
> arg.list <- paste0("-sysparm ", "'", arg.1, " ", arg.2, "'") 
> cmd <- paste(exe.prg, arg.list)
> 
> #izvrsiti SAS program u odnosu na poslate argumente
> system(cmd)
[1] 0

> #provjera
> #narednu komandu izvrsiti ukoliko haven paket vec nije instaliran
> #install.packages("haven")
> library(haven)
> #SAS data set import
> read_sas(paste0(arg.1, "test.sas7bdat"))
# A tibble: 10 x 1
       x
   <dbl>
 1     1
 2     2
 3     3
 4     4
 5     5
 6     6
 7     7
 8     8
 9     9
10    10

Last updated

Was this helpful?