Intégrer du code R dans SAS, ça paraîtrait une drôle d’idée pour beaucoup d’entre vous. Néanmoins, SAS est aujourd’hui toujours très bien implanté dans le monde de la data, l’héritage d’une longue hégémonie se fait toujours sentir. Lorsque je rencontre des clients, leur intérêt pour d’autres langages est toujours vif mais doit faire face à une réelle inquiétude. Le risque de devoir tout recommencer à zéro. De devoir former toutes les équipes de data miners et statisticiens, de devoir recréer des routines mises en place depuis bien longtemps sous forme de macros…
Bien évidemment, le passage à R ou python demande une réelle réflexion sur la capacité au changement. Une première étape peut être d’intégrer du code R dans SAS.
Pourquoi utiliser R ?
R est aujourd’hui le langage (avec python) de prédilection pour la data science et la statistique. Sa principale force est sa capacité à proposer des méthodes statistiques avancées afin de traiter vos données. Par ailleurs, il propose des outils de qualité pour la data visualisation et l’interaction avec des structures externes dans l’écosystème big data.
Pourquoi garder SAS ?
Dans la plupart des structures qui traitent de la donnée, SAS est présent. Les utilisateurs sont donc nombreux et habitués à l’utiliser généralement pour appliquer des routines simples et pour cela SAS est très bon.
On se rend compte que la migration de SAS vers un autre langage ne peut pas se faire en une seule étape, il faut donc garder SAS du moins au début.
Pourquoi ne pas garder les deux en parallèle ?
J’ai pu remarquer que dans de nombreuses structures SAS et R sont utilisés en parallèle. Généralement par des personnes différentes dans la structure. On voit ce type d’habitude dans de nombreux domaines notamment pour les outils de BI (avec Excel qui garde sa place en parallèle).
Faire cela avec R et SAS est un non sens car vous allez perdre un temps fou à travailler sur vos données dans un langage et à le refaire dans l’autre langage. Autant faire du R dans SAS afin de combiner les avantages des deux approches.
Comment intégrer du R dans SAS ?
Quelle que soit la solution utilisée, il vous faudra une version de R installée sur la machine sur laquelle SAS est installé.
1- L’utilisation de SAS/IML
C’est l’approche conseillée par SAS. SAS/IML est un module de SAS permettant d’utiliser un langage spécifique l’IML. SAS a développé des outils pour SAS permettant d’introduire du code R dans SAS en utilisant la proc IML.
Préparation de la machine
Si SAS est installé sur votre machine, il faudra que R soit installé aussi sur cette machine. Si vous travaillez sur un serveur SAS, il faut que R soit installé sur le serveur SAS.
Attention, à part pour la version SAS 64 bits pour Linux, il faut toujours installer la version 32 bits de R.
Adaptation de SAS
On doit tout d’abord vérifié que l’option RLANG est activée, le code suivant doit renvoyer RLANG
proc options option=RLANG;
run;
Si la sortie est NORLANG, il faut lancer SAS avec l’option -RLANG.
Soumettre du code R dans SAS
Il est très simple de soumettre du code R dans SAS, voici un exemple basique :
proc IML;
submit / R;
code R...
endsubmit;
quit;
On pourra utiliser du code plus complexe avec notamment le chargement de packages R.
Charger des données dans R
Les données doivent être sous forme de table SAS ou de matrice IML. De la même façon, de R vers SAS, on utilisera des dataframes ou des matrices R.
Voici un exemple de code pour charger des données en R :
proc IML;
run ExportDataSetToR("table1","df1");
submit / R;
code R...
endsubmit;
quit;
Pour effectuer l’opération inverse, on utilisera ImportDataSetFromR.
Vous trouverez tous les détails sur cette approche dans la documentation de SAS ici :
http://support.sas.com/documentation/cdl/en/imlug/63541/HTML/default/viewer.htm#r_toc.htm
2- L’utilisation de base SAS Java Object
Si vous n’avez pas SAS/IML, il est tout de même possible de créer un pont entre R (ou python) et SAS. Pour cela, on utilisera le système d’objets Java de SAS (Base SAS Java Object).
Voici un exemple d’utilisation de cette approche :
data _null_;
length rtn_val 8;
*** on spécifie le répertoire de travail dans le code R;
r_pgm = "&WORK_DIR.\test_svm.R";
r_arg1 = "&WORK_DIR";
r_call = cat('"', trim(r_pgm), '" "', trim(r_arg1), '"');
declare javaobj j("dev.SASJavaExec", "&R_EXEC_COMMAND", r_call);
j.callIntMethod("executeProcess", rtn_val);
run;
On a donc un code simple pour lancer un fichier .R avec le code R à l’intérieur.
On aura défini et adapté en amont :
%let WORK_DIR = C:\...;
%let R_EXEC_COMMAND = C:\Program Files\R\R-3.1.2\bin\x64\Rscript.exe;
Les erreurs et sorties générées sont inscrits dans le LOG de SAS et il faudra ensuite recharger les sorties en utilisant des import SAS à partir de fichier csv obtenus en R.
Vous trouverez des exemples sur cette approche (pour R et python et en anglais) à cette adresse :
https://github.com/sassoftware/enlighten-integration
3- L’utilisation de macros
Depuis 2012, des macros SAS ont été développées pour faire du R dans SAS. La plus connue est celle de Xin Wei développée en 2012 (cela date un peu). Cette macro simplifie grandement l’utilisation de R dans SAS mais elle utilise des « trucs » pour le faire et il est évident qu’il ne s’agit pas ici d’optimiser l’utilisation de R dans SAS.
Son fonctionnement est simple mais demande quelques adaptations en fonction de votre version de SAS et du chemin associé à R sur votre machine. Elle a été testée sans souci sous SAS 9.2 mais peut demander des modifications pour les versions ultérieures.
Les étapes de traitement sont les suivantes :
- Le script R est écrit dans un fichier texte
- Les données sont transformées pour être mises à disposition de R
- R est appelé en mode batch pour appliquer le script
- Les résultats sont récupérés dans SAS soit sous forme de fichier .csv, soit directement dans le log et les sorties.
Vous trouverez le code de la macro ici :
https://github.com/Jiangtang/Programming-SAS/tree/master/sas_procR
L’utilisation de la macro se fait de manière simple, vous trouverez des détails dans cet article (en anglais) :
http://www.listendata.com/2016/09/run-r-from-sas.html
4- L’utilisation de WPS
Une dernière solution est l’offre de WPS qui est un outil concurrent de SAS et permet de traiter des codes SAS sans SAS. WPS propose une procédure nommée proc R qui permet d’intégrer du code et des sorties R dans votre code SAS.
Voir : https://www.worldprogramming.com/fr/products/wps/modules/language/interop_for_r
Quel objectif à terme ?
Evidemment dans le monde mouvant de la data, il est difficile de prédire ce qui se passera dans quelques années. Mais la tendance est claire, les outils libres tels que R ou python sont installés pour durer avec des communautés actives. On ne peut pas aujourd’hui considérer que ces solutions peuvent être mises de côté sans s’y investir. Je ne dis pas que tout le monde doit passer à R ou python mais que toutes les structures qui considèrent que leurs données sont sources de croissance doivent s’y essayer.
Envie d’en savoir plus ?
Contactez-nous pour obtenir des conseils pour faire du R dans SAS ou pour toute autre question relatives à R, python et la data science.
Inscrivez-vous à nos formations pour vous perfectionner et apprendre à utiliser les nouveaux outils de la data science.
Partager cet article