miércoles, 5 de agosto de 2015

Ejecutar script de R desde SAS

Recientemente me han preguntado cómo llamar scripts de R desde SAS. Así que vamos en este post a mostrar alguna de las formas de hacerlo.




De entrada comentar que existen diversas formas de hacerlo. Como pueden ser:

- Utilizar la macro %Proc_R que se puede descargar desde Proc_R.sas y permite integrar el código R en el proceso SAS

- Utilizar el SAS Java Object (SASJavaExec.jar)  tal y como se explica en  R y Phyton desde SAS

Utilizar la interfaz con R de el módulo SAS/IML, tal y como se explica en interfaz IML con R en este caso insertarmos el código R en el procedimiento proc iml:

proc iml; submit / R; /* código R */ endsubmit; quit;

Seguramente existan muchas más. Yo adjunto un sencillo ejemplo, haciendo uso de la función call system de SAS que permite hacer llamadas al sistema para arrancar un script de R desde el directorio raíz donde se encuentra R en nuestra instalación. Para arrancar el script se hace uso de la utilidad Rscript propia de R.

data _null_;
call system("cd C:\Program Files\R\R-3.1.2\bin");
call system("Rscript C:\temp\R\scripts\ej_exportar_fichero6.R");
run;

En lugar de un call system, podemos utilizar cualquiera de las otras formas de llamar al sistema desde SAS:

x "comandos a ejecutar";
%sysexec comandos a ejecutar;

Se han enumerado algunas de las opciones para comunicar de forma eficiente SAS y R, la formación de calidad y la experiencia nos harán encontrar otras opciones, como por ejemplo la que tenemos en la web de analisisydecision.es Modelo en R, gestión de datos en SAS

5 comentarios:

  1. Hola, estoy utilizando SAS Enterprise Guide y, cada vez que abro un proyecto, cuando tengo que asignar una librería en el servidor tengo que hacerlo utilizando el ratón y pinchando el botón derecho y asignar. A veces se me olvida y me saltan muchos errores ya que tengo colgadas muchas tablas que se utilizan en el servidor y si no se asigna la librería no las reconoce. Mi pregunta es, ¿existe alguna sentencia en código para asignarlas automáticamente sin necesidad de utilizar el ratón?

    Saludos y gracias.

    ResponderEliminar
    Respuestas
    1. LIBNAME ‘ruta (local o remota)’

      Nombre Librería : Nombre de acceso a la librería.
      Ruta: Ruta dónde será ubicada ( local o remota).

      Ejemplo:

      libname libtest ‘/home/juanvg1972/ficheros’

      Eliminar
  2. Este código es muy útil ya que traducir desde un lenguaje a otro suele ser mus costoso, y esta manera de ejecutarlo es más rápido.

    Otra cosa que sería de mucha utilidad es el poder ejecutar un código de SAS desde algún entorno de programación de Java como Netbeans o Eclipse, ya que yo, con mis pocos conocimientos de SAS no he podido encontrar las sentencias de try{}catch{} que posee Java y que son muy útiles. Estas sentencias para mí serían útiles de la siguiente forma:
    try{
    Código SAS
    }
    catch{
    Imprimir en un .txt cualquier error que haya surgido en la ejecución del código SAS
    }

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola David,
      Puedes controlar el error con la macrovariable: syserr
      Aunque SAS no es un entorno orientado a transacciones y no ofrece muchas funcionalidades de control de errores.
      Un saludo,

      Eliminar
    2. Hola David,
      Puedes controlar el error con la macrovariable: syserr
      Aunque SAS no es un entorno orientado a transacciones y no ofrece muchas funcionalidades de control de errores.
      Un saludo,

      Eliminar