logo

Dictionnaire de SAS vers R

C comme CONTENTS : pour mieux savoir quelles variables contient un data.frame, la fonction str donne un bon aperçu. Une alternative est glimpse du package {tibble}

D comme DATE : plusieurs types de R stockent des dates, le plus courant étant Date (avec un D majuscule). Les types POSIXlt et POSIXct correspondent eux aux datetimes. Le package {lubridate} est une mine de fonctions pour gérer aisément des dates et des intervalles de temps

D comme DDE (lien) : le package {openxlsx} propose de lire le contenu d’un fichier xlsx existant, d’y ajouter des onglets ou simplement d’écrire des données dans des cellules précises, permettant ainsi d’avoir un classeur Excel modèle contenant TCD et graphiques que R mettra à jour avant d’enregistrer éventuellement sous un nouveau nom

E comme ETAPE DATA : ce sont des fonctions qui assurent une bonne partie des tâches de l’étape DATA (rbind pour un SET à plusieurs tables, merge pour un MERGE). La création de variables se fait le plus couramment avec l’opérateur d’affectation <- (même s’il existe aussi des fonctions qui créent des variables). La fonction ifelse permet de mettre en place des formules conditionnelles. La suite de packages {tidyverse} propose une série de fonctions qui reprennent quasiment l’intégralité de ce que permet l’étape Data, en échange d’un investissement d’une syntaxe spécifique pas exactement conforme à R Base (et un peu plus complexe à automatiser)

F comme FORMAT : il y a peu de cas où on trouve dans R l’équivalent des formats. La plupart des valeurs s’affichent comme elles sont stockées, à l’exception des dates et des facteurs. Ces derniers forment un type stocké sous forme d’entiers mais vu comme des textes via un système de correspondances (les niveaux) qui ressemble à la logique d’un format SAS ; cependant les valeurs stockées sont des entiers arbitraires et pas des codes ayant un sens, au contraire d’une variable formatée sous SAS

F comme FREQ : la fonction table assure une bonne partie des fonctionnalités de la procédure FREQ, avec d’autres fonctions périphériques pour compléter (prop.table, addmargins, chisq.test, etc.). Le package {descriptr} propose la fonction ds_auto_freq_table dont les sorties imitent celles de FREQ

I comme IMPORT : de nombreuses fonctions se proposent de faire le travail de la procédure IMPORT. Pour les fichiers plats, on citera read.delim et son alter-ego ultra-rapide fread du package {data.table}. Pour un contrôle plus fin (type étape DATA / INFILE / INPUT) ce sera plutôt dans le package {readr} que l’on cherchera son bonheur. Pour les classeurs Excel, il faut utiliser des packages comme {readxl}, {xlsx}, etc.). Pour les fichiers statistiques (SPSS, Stata et tables SAS), le package {haven} est le plus performant

K comme KEEP : on conserve uniquement certaines colonnes avec une syntaxe à base de crochets ou avec la fonction select du package {dplyr}

L comme LABEL : les labels de variables au sens SAS sont récupérés lors de l’import par le package {haven} mais rarement exploités par d’autres fonctions. Le package {labeller} essaye de promouvoir des labels de variables mais ne s’apparie qu’avec un petit nombre d’autres packages

L comme LIBNAME : pas de notion équivalente, toutes les données sont en mémoire vive. Pour l’utilisateur, c’est comme si tout était en WORK

L comme LOG : la Console sert à la fois de fenêtre Log et de fenêtre affichant vos sorties texte. Les messages qui y sont affichés n’ont pas de couleurs officiellement liées à leur niveau de gravité (le rouge peut être un message purement informatif, par exemple quand on télécharge un package)

L comme LOGISTIC : pour retrouver la pagination et la richesse des sorties d’une proc Logistic, il est  conseillé de nourrir le package {blorr} avec la sortie de votre fonction glm

M comme MACRO-PROGRAMME : ce qui s’en rapproche le plus est de construire une fonction personnalisée. Dans ce contexte on peut mobiliser aisément des boucles et des conditions équivalentes aux %DO et %IF de SAS. Cependant de nombreuses astuces permettent d’éviter les boucles par vectorisation A noter qu’au contraire de SAS on peut ajouter une boucle dans n’importe quel code R, pas seulement à l’intérieur d’une fonction

M comme MACRO-VARIABLE : il n’y a pas d’équivalent strict, le rôle d’une macro-variable (transporter des valeurs d’un point à un autre d’un programme) est plutôt associé à des objets de type vecteur (1 ou plusieurs valeurs de même type) ou liste (valeurs de types hétérogènes)

M comme MEANS : plusieurs fonctions se proposent de réaliser les calculs de la procédure MEANS, en particulier summary ou aggregate

N comme NOMS : dans R les normes pour les noms de colonnes ou d’objets sont beaucoup plus souples. Il n’y a pas vraiment de limite sur leur longueur, et les caractères spéciaux sont acceptés. Attention surtout, R est sensible à la casse (majuscules / minuscules) aussi bien pour les noms de fonctions que d’objets ou de colonnes

O comme ODS : il n’existe pas d’équivalent dans R pour l’ensemble du système ODS. La création d’objets à partir des sorties d’une fonction se fait de façon intuitive, par affectation <-. L’export de sorties texte (tableaux) ou graphiques vers des formats HTML, PDF ou Word se fait plutôt via le système Rmarkdown ou via des packages spécialisés sur certains types de fichiers ({officer} pour les documents Word ou PowerPoint, {openxlsx} pour les classeurs Excel)

P comme PRINT : la fonction print est l’équivalent de la procédure PRINT. Elle est tellement fondamentale dans R qu’on peut l’appeler simplement en exécutant le nom d’un objet : exécuter le code a est l’équivalent de print(a) sauf dans une boucle où il faut expliciter l’appel à cette fonction. Pour les data.frames, la fonction as_tibble du package {tibble} permet d’avoir un affichage partiel tenant compte de la taille de la Console

P comme PROCEDURE : ce sont des fonctions, parfois plusieurs, qui assurent les tâches dévolues aux procédures

S comme SAUVEGARDE : si toutes les données sont en mémoire vive, est-il nécessaire de relancer tous les traitements au démarrage de R ? Non, on peut sauvegarder les objets de manière individuelle (fichiers RDS) ou collective (fichiers RDATA) pour les restaurer dans une autre session

S comme SQL : si le package {sqldf} est dédié à l’exécution de code SQL « classique » (type PROC FEDSQL) sur des data.frames, le package {dplyr} propose une alternative plus souple, inspirée du SQL mais pas forcément fidèle à sa syntaxe, et capable de déléguer certaines tâches à une base de données comme le SQL passthru de SAS

T comme TABLE : on appelle l’équivalent des tables SAS des data.frames. Il s’agit d’un des nombreux types d’objets disponibles dans R. Des variantes de data.frames appelées data.tables (pour des calculs plus rapides) et tibbles (pour un affichage plus élégant) sont apparues plus récemment

T comme TRANSPOSE : le package {reshape2} contient deux fonctions melt et dcast qui permettent de faire l’équivalent des transpositions de la procédure TRANSPOSE. Certains préfèrent les packages {tidyr} (appartenant au groupe de packages du tidyverse) ou {cdata}

U comme UNIVARIATE : la fonction describe du package {Hmisc} s’en rapproche, sans pour autant proposer également les aspects graphiques dévolus à des fonctions comme hist (histogrammes) ou qqnorm (QQ-plot de normalité). Le package {descriptr} propose la fonction ds_summary_stats dont les sorties imitent celles d’Univariate ; les graphiques sont obtenus avec des fonctions séparées du même package

W comme WHERE : on conserve uniquement certaines lignes avec une syntaxe à base de crochets et de la fonction which ou avec la fonction filter du package {dplyr}

9 found this helpful