{"id":9296,"date":"2026-10-14T18:02:29","date_gmt":"2026-10-14T18:02:29","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-exporter-donnees-sas-vers-fichier-csv-exemples\/"},"modified":"2026-10-14T18:02:29","modified_gmt":"2026-10-14T18:02:29","slug":"comment-exporter-donnees-sas-vers-fichier-csv-exemples","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-exporter-donnees-sas-vers-fichier-csv-exemples","title":{"rendered":"Comment exporter des donn\u00e9es de SAS vers un fichier CSV (avec exemples)"},"content":{"rendered":"<p>Dans le paysage contemporain de l&rsquo;analyse de donn\u00e9es avanc\u00e9e, de la biostatistique et des sciences quantitatives, le progiciel <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.sas.com\">SAS (Statistical Analysis System)<\/a> s&rsquo;est durablement impos\u00e9 comme une r\u00e9f\u00e9rence institutionnelle pour le traitement de structures d&rsquo;informations massives et complexes. Cependant, l&rsquo;\u00e9volution rapide des \u00e9cosyst\u00e8mes technologiques et la d\u00e9mocratisation des plateformes libres d&rsquo;analyse ont profond\u00e9ment red\u00e9fini les exigences m\u00e9thodologiques li\u00e9es \u00e0 la gestion des donn\u00e9es empiriques. La recherche scientifique et la prise de d\u00e9cision op\u00e9rationnelle ne s&rsquo;ex\u00e9cutent plus en vase clos au sein d&rsquo;une architecture logicielle unique, mais requi\u00e8rent au contraire des passerelles fluides, reproductibles et v\u00e9rifiables entre des syst\u00e8mes h\u00e9t\u00e9rog\u00e8nes.<\/p>\n<p>L&rsquo;exportation de donn\u00e9es stock\u00e9es sous la forme de tables propri\u00e9taires SAS vers des fichiers texte structur\u00e9s \u00e0 valeurs s\u00e9par\u00e9es par des d\u00e9limiteurs, commun\u00e9ment d\u00e9sign\u00e9s sous l&rsquo;acronyme CSV (<em>Comma-Separated Values<\/em>), constitue l&rsquo;une des d\u00e9marches fondamentales garantissant cette continuit\u00e9 op\u00e9rationnelle. Loin de repr\u00e9senter une simple op\u00e9ration technique subalterne, l&rsquo;exportation vers le format CSV implique une compr\u00e9hension fine de la s\u00e9mantique sous-jacente des variables, du comportement du moteur d&rsquo;ex\u00e9cution s\u00e9quentiel de SAS, de la gestion de la m\u00e9moire vive et de la pr\u00e9servation des formats num\u00e9riques et textuels. Une mauvaise configuration des param\u00e8tres d&rsquo;exportation peut corrompre l&rsquo;int\u00e9grit\u00e9 de jeux de donn\u00e9es longitudinaux, alt\u00e9rer des variables de datation ou introduire des biais syst\u00e9matiques dans le cadre de mod\u00e9lisations ult\u00e9rieures.<\/p>\n<p>Cet article propose un examen m\u00e9thodologique exhaustif des techniques d&rsquo;exportation de donn\u00e9es de l&rsquo;environnement SAS vers le format CSV. \u00c0 travers l&rsquo;analyse de la proc\u00e9dure standardis\u00e9e <code>PROC EXPORT<\/code>, l&rsquo;exploration de la programmation de bas niveau via l&rsquo;\u00e9tape <code>DATA<\/code> et l&rsquo;instruction <code>FILE<\/code>, ainsi que le d\u00e9ploiement d&rsquo;architectures macro-analytiques automatis\u00e9es, ce guide s&rsquo;adresse aux biostatisticiens, psychom\u00e9triciens, ing\u00e9nieurs de donn\u00e9es et chercheurs d\u00e9sireux de ma\u00eetriser la cha\u00eene compl\u00e8te de transformation de leurs donn\u00e9es avec un niveau d&rsquo;exigence acad\u00e9mique et professionnel optimal.<\/p>\n<h2>1. Introduction \u00e0 l&rsquo;exportation de donn\u00e9es dans SAS : Contexte m\u00e9thodologique et enjeux<\/h2>\n<h3>1.1 Importance de l&rsquo;interop\u00e9rabilit\u00e9 des donn\u00e9es dans la recherche quantitative<\/h3>\n<p>Au sein des laboratoires de recherche quantitative, des d\u00e9partements d&rsquo;\u00e9pid\u00e9miologie clinique et des unit\u00e9s d&rsquo;\u00e9valuation psychom\u00e9trique, la centralisation des donn\u00e9es sous des formats propri\u00e9taires a longtemps constitu\u00e9 une norme pragmatique garantissant la performance computationnelle et la s\u00e9curit\u00e9 transactionnelle. Toutefois, l&rsquo;essor des principes directeurs <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.go-fair.org\/fair-principles\/\">FAIR (Faciles \u00e0 trouver, Accessibles, Interop\u00e9rables et R\u00e9utilisables)<\/a> a transform\u00e9 la gouvernance de l&rsquo;information empirique. Les protocoles scientifiques exigent d\u00e9sormais que les jeux de donn\u00e9es bruts et d\u00e9riv\u00e9s puissent \u00eatre audit\u00e9s, r\u00e9analys\u00e9s et partag\u00e9s sans d\u00e9pendance exclusive envers une licence commerciale restrictive. La conversion des donn\u00e9es SAS vers des formats ouverts devient ainsi le pivot central des politiques de transparence m\u00e9thodologique et de reproductibilit\u00e9 computationnelle.<\/p>\n<p>Le format CSV pr\u00e9sente des propri\u00e9t\u00e9s architecturales singuli\u00e8res qui expliquent sa persistance en tant que standard universel d&rsquo;\u00e9change. En tant que fichier plat (<em>flat file<\/em>) en mode texte brut, il s&rsquo;affranchit des couches d&rsquo;abstraction binaire et des m\u00e9tadonn\u00e9es propri\u00e9taires. Cette neutralit\u00e9 structurelle garantit une long\u00e9vit\u00e9 archivistique exceptionnelle : un fichier textuel demeure lisible \u00e0 travers les d\u00e9cennies, ind\u00e9pendamment de l&rsquo;obsolescence programm\u00e9e des syst\u00e8mes d&rsquo;exploitation ou des logiciels sp\u00e9cialis\u00e9s. En outre, la collaboration interdisciplinaire contemporaine implique fr\u00e9quemment la mobilisation conjointe de chercheurs utilisant SAS pour le nettoyage de bases massives, d&rsquo;\u00e9quipes mobilisant <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.r-project.org\">R<\/a> pour les mod\u00e9lisations d&rsquo;\u00e9quations structurelles, et de data scientists exploitant <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.python.org\">Python<\/a> pour l&rsquo;apprentissage automatique. Le fichier CSV agit alors comme le vecteur communicationnel de r\u00e9f\u00e9rence minimisant les frictions lors des transferts inter-logiciels.<\/p>\n<p>\u00c0 l&rsquo;inverse, l&rsquo;enfermement dans le format binaire propri\u00e9taire SAS, mat\u00e9rialis\u00e9 par l&rsquo;extension <code>.sas7bdat<\/code>, expose les consortiums de recherche \u00e0 des contraintes structurelles s\u00e9v\u00e8res. L&rsquo;ouverture directe de ces fichiers par des tiers non \u00e9quip\u00e9s de l&rsquo;infrastructure SAS n\u00e9cessite le recours \u00e0 des modules d&rsquo;ingestion sp\u00e9cialis\u00e9s (comme les biblioth\u00e8ques <code>haven<\/code> en R ou <code>pyreadstat<\/code> en Python), qui peuvent manifester des incompatibilit\u00e9s selon les sous-versions d&rsquo;encodage du moteur SAS h\u00f4te. De surcro\u00eet, les m\u00e9canismes de s\u00e9curit\u00e9 institutionnels interdisent r\u00e9guli\u00e8rement l&rsquo;installation d&rsquo;outils de d\u00e9codage binaire tiers dans des environnements de confiance hautement s\u00e9curis\u00e9s. Ainsi, ma\u00eetriser l&rsquo;exportation standardis\u00e9e vers un format textuel d\u00e9limit\u00e9 permet non seulement de pr\u00e9server la souverainet\u00e9 des donn\u00e9es produites, mais garantit \u00e9galement la r\u00e9plication exacte des r\u00e9sultats empiriques en \u00e9liminant toute incertitude li\u00e9e au d\u00e9codage de couches binaires propri\u00e9taires.<\/p>\n<h3>1.2 Panorama des approches d&rsquo;exportation disponibles sous SAS<\/h3>\n<p>L&rsquo;architecture modulaire du syst\u00e8me SAS met \u00e0 la disposition des analystes deux paradigmes principaux pour op\u00e9rer l&rsquo;extraction des donn\u00e9es tabulaires vers un support externe d\u00e9limit\u00e9 : l&rsquo;approche d\u00e9clarative et automatis\u00e9e incarn\u00e9e par la proc\u00e9dure <code>PROC EXPORT<\/code>, et l&rsquo;approche proc\u00e9durale de bas niveau mat\u00e9rialis\u00e9e par l&rsquo;\u00e9tape <code>DATA<\/code> coupl\u00e9e aux instructions <code>FILE<\/code> et <code>PUT<\/code>. Chacune de ces m\u00e9thodologies r\u00e9pond \u00e0 des exigences distinctes d&rsquo;arbitrage entre simplicit\u00e9 de mise en \u0153uvre, consommation de ressources de calcul et finesse de contr\u00f4le sur la structure de sortie.<\/p>\n<p>La proc\u00e9dure <code>PROC EXPORT<\/code> repr\u00e9sente le m\u00e9canisme d&rsquo;extraction le plus direct et le plus couramment document\u00e9. Con\u00e7ue comme un wrapper automatis\u00e9, elle interroge le descripteur de la table SAS source pour d\u00e9terminer dynamiquement la liste des variables, leur type (num\u00e9rique ou caract\u00e8re), leur format d&rsquo;affichage et leurs \u00e9tiquettes associ\u00e9es. En quelques instructions \u00e9l\u00e9mentaires, elle g\u00e9n\u00e8re un flux de donn\u00e9es structur\u00e9 respectant les conventions formelles du type de d\u00e9limiteur choisi. Cette proc\u00e9dure masque la complexit\u00e9 algorithmique sous-jacente en prenant en charge de mani\u00e8re autonome l&rsquo;inclusion des en-t\u00eates, la d\u00e9limitation des cha\u00eenes textuelles par des guillemets et la gestion basique des valeurs manquantes. Pour la grande majorit\u00e9 des traitements quotidiens et des flux de travail o\u00f9 la structure des tables est standardis\u00e9e, <code>PROC EXPORT<\/code> constitue la solution optimale par son ergonomie et sa lisibilit\u00e9 syntaxique.<\/p>\n<p>Cependant, face \u00e0 des jeux de donn\u00e9es hautement h\u00e9t\u00e9rog\u00e8nes, des fichiers de taille extr\u00eame d\u00e9passant plusieurs dizaines de gigaoctets ou des contraintes strictes de formatage (telles que des alignements sp\u00e9cifiques, des masquages conditionnels de cellules ou l&rsquo;absence totale de d\u00e9limiteurs de cha\u00eenes pour des syst\u00e8mes r\u00e9cepteurs archa\u00efques), l&rsquo;\u00e9tape <code>DATA<\/code> offre une flexibilit\u00e9 algorithmique absolue. En mobilisant l&rsquo;instruction <code>FILE<\/code> associ\u00e9e au modificateur <code>DSD<\/code> (<em>Delimiter-Sensitive Data<\/em>) et \u00e0 la boucle it\u00e9rative d&rsquo;\u00e9criture pilot\u00e9e par l&rsquo;instruction <code>PUT<\/code>, le programmeur s&rsquo;affranchit des r\u00e8gles implicites des modules pr\u00e9-compil\u00e9s de SAS. Cette approche permet de manipuler les flux d&rsquo;octets de fa\u00e7on s\u00e9quentielle, de conditionner l&rsquo;\u00e9criture ligne par ligne, d&rsquo;injecter des m\u00e9tadonn\u00e9es dynamiques au sein du flux de donn\u00e9es et de r\u00e9duire drastiquement l&#8217;empreinte m\u00e9moire du traitement. Le choix entre ces deux approches ne rel\u00e8ve donc pas d&rsquo;une pr\u00e9f\u00e9rence stylistique, mais proc\u00e8de d&rsquo;une analyse rigoureuse de la complexit\u00e9 volum\u00e9trique et qualitative des donn\u00e9es \u00e0 traiter.<\/p>\n<h2>2. Comprendre la proc\u00e9dure PROC EXPORT : Syntaxe de base et m\u00e9canique interne<\/h2>\n<h3>2.1 D\u00e9composition fondamentale de l&rsquo;instruction PROC EXPORT<\/h3>\n<p>Pour exploiter rigoureusement la proc\u00e9dure <code>PROC EXPORT<\/code>, il convient de diss\u00e9quer ses composants syntaxiques fondamentaux et d&rsquo;appr\u00e9hender la mani\u00e8re dont le compilateur SAS interpr\u00e8te chaque clause de l&rsquo;instruction. Dans sa formulation la plus \u00e9pur\u00e9e, la proc\u00e9dure mobilise quatre \u00e9l\u00e9ments directeurs qui r\u00e9gissent l&rsquo;int\u00e9gralit\u00e9 du processus de s\u00e9rialisation des donn\u00e9es tabulaires :<\/p>\n<p><code>PROC EXPORT DATA=bibliotheque.table_source<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"chemin\/vers\/fichier_cible.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\nRUN;<\/code><\/p>\n<p>L&rsquo;argument <code>DATA=<\/code> d\u00e9finit de fa\u00e7on explicite la table SAS d&rsquo;origine h\u00e9berg\u00e9e au sein de l&rsquo;espace de stockage temporaire (biblioth\u00e8que <code>WORK<\/code>) ou permanent. Cet argument ne se limite pas \u00e0 une simple d\u00e9signation nominale : il autorise l&rsquo;int\u00e9gration imm\u00e9diate d&rsquo;options de table entre parenth\u00e8ses, permettant d&rsquo;alt\u00e9rer la structure des donn\u00e9es en m\u00e9moire avant m\u00eame que le moteur d&rsquo;exportation n&rsquo;engage l&rsquo;\u00e9criture sur le disque. Cette propri\u00e9t\u00e9 s&rsquo;av\u00e8re strat\u00e9gique pour optimiser les performances en \u00e9vitant des passes de calcul interm\u00e9diaires.<\/p>\n<p>L&rsquo;argument <code>OUTFILE=<\/code> d\u00e9signe la cible physique d&rsquo;\u00e9criture sur le syst\u00e8me de fichiers h\u00f4te, sous la forme d&rsquo;une cha\u00eene de caract\u00e8res repr\u00e9sentant un chemin d&rsquo;acc\u00e8s absolu ou relatif. La robustesse des architectures de production requiert l&rsquo;usage syst\u00e9matique de chemins absolus normalis\u00e9s ou l&rsquo;exploitation de r\u00e9f\u00e9rences dynamiques g\u00e9n\u00e9r\u00e9es par des variables macro. La sp\u00e9cification de l&rsquo;argument <code>DBMS=CSV<\/code> indique quant \u00e0 elle au moteur sous-jacent le pilote de traitement \u00e0 instancier. L&rsquo;acronyme DBMS (<em>Database Management System<\/em>) informe SAS qu&rsquo;il doit appliquer les conventions formelles du standard CSV, notamment l&#8217;emploi de la virgule comme s\u00e9parateur par d\u00e9faut de champs, l&rsquo;adjonction syst\u00e9matique d&rsquo;une ligne d&rsquo;en-t\u00eate portant le nom des variables et l&rsquo;encadrement par des guillemets doubles des cha\u00eenes de caract\u00e8res renfermant des d\u00e9limiteurs ou des caract\u00e8res d&rsquo;\u00e9chappement. Enfin, l&rsquo;instruction <code>RUN;<\/code> d\u00e9clenche la soumission du bloc au compilateur s\u00e9quentiel, scellant la fronti\u00e8re transactionnelle du module d&rsquo;exportation.<\/p>\n<h3>2.2 M\u00e9canisme d&rsquo;ex\u00e9cution et g\u00e9n\u00e9ration des journaux de traitement<\/h3>\n<p>L&rsquo;ex\u00e9cution de <code>PROC EXPORT<\/code> ne se r\u00e9duit pas \u00e0 une simple copie de flux d&rsquo;informations : elle d\u00e9clenche une s\u00e9rie complexe d&rsquo;op\u00e9rations internes d&rsquo;interrogation des m\u00e9tadonn\u00e9es. Dans un premier temps, SAS ouvre la table source en mode de lecture partag\u00e9e et acc\u00e8de \u00e0 son bloc de descripteur (<em>descriptor portion<\/em>). Ce bloc contient la d\u00e9finition structurelle formelle de la table : le nombre d&rsquo;observations, le vecteur des noms de colonnes, leurs formats d&rsquo;affichage associ\u00e9s, les attributs d&rsquo;encodage (par exemple UTF-8 ou WLATIN1) et la typologie stricte de chaque variable. \u00c0 partir de ces \u00e9l\u00e9ments, la proc\u00e9dure g\u00e9n\u00e8re en coulisse un script temporaire d&rsquo;\u00e9tape <code>DATA<\/code> optimis\u00e9, exploitant les instructions <code>FILE<\/code> et <code>PUT<\/code>, qu&rsquo;elle compile et ex\u00e9cute imm\u00e9diatement au sein du sous-syst\u00e8me SAS.<\/p>\n<p>Ce processus de compilation et de transcription se refl\u00e8te de mani\u00e8re transparente au sein du journal d&rsquo;ex\u00e9cution (le <em>SAS Log<\/em>), qui constitue l&rsquo;unique garant de la conformit\u00e9 m\u00e9thodologique du traitement. Un examen rigoureux du journal permet d&rsquo;observer la succession des phases op\u00e9rationnelles : l&rsquo;instanciation de la cible de sortie, la confirmation du d\u00e9limiteur utilis\u00e9, le volume exact de lignes inject\u00e9es dans le fichier textuel et le temps d&rsquo;ex\u00e9cution CPU et r\u00e9el allou\u00e9 \u00e0 l&rsquo;op\u00e9ration. L&rsquo;apparition d&rsquo;avertissements (<code>WARNING<\/code>) ou d&rsquo;erreurs (<code>ERROR<\/code>) dans ce journal signale imm\u00e9diatement des anomalies de troncature textuelle, des corruptions de conversion num\u00e9rique ou des conflits de verrouillage de fichiers.<\/p>\n<p>Dans les pipelines de traitement automatis\u00e9s \u00e0 haute fiabilit\u00e9, la simple inspection visuelle du journal s&rsquo;av\u00e8re insuffisante. Les d\u00e9veloppeurs chevronn\u00e9s interrogent syst\u00e9matiquement la variable d&rsquo;environnement automatique <code>&amp;SYSCC<\/code> (<em>System Condition Code<\/em>) imm\u00e9diatement apr\u00e8s l&rsquo;instruction <code>RUN;<\/code>. Cette macro-variable capture l&rsquo;\u00e9tat terminal de la derni\u00e8re proc\u00e9dure ex\u00e9cut\u00e9e : une valeur de 0 indique un succ\u00e8s parfait sans la moindre r\u00e9serve structurelle, une valeur de 4 signale la pr\u00e9sence d&rsquo;avertissements m\u00e9thodologiques n\u00e9cessitant un audit, tandis qu&rsquo;une valeur sup\u00e9rieure ou \u00e9gale \u00e0 8 d\u00e9note un \u00e9chec critique ayant interrompu l&rsquo;\u00e9criture du fichier. L&rsquo;\u00e9valuation conditionnelle de ce code de retour permet d&rsquo;interrompre pr\u00e9ventivement les cha\u00eenes d&rsquo;analyse ult\u00e9rieures en cas d&rsquo;alt\u00e9ration de l&rsquo;exportation.<\/p>\n<h2>3. Param\u00e8tres essentiels de l&rsquo;instruction PROC EXPORT pour les fichiers CSV<\/h2>\n<h3>3.1 \u00c9crasement et s\u00e9curisation des fichiers cibles : L&rsquo;option REPLACE<\/h3>\n<p>L&rsquo;administration des fichiers au sein d&rsquo;environnements multi-utilisateurs et de serveurs d&rsquo;analyse partag\u00e9s exige une rigueur absolue quant \u00e0 la persistance des livrables de donn\u00e9es. Par d\u00e9faut, si l&rsquo;argument <code>OUTFILE=<\/code> pointe vers un fichier textuel pr\u00e9existant sur le syst\u00e8me de fichiers h\u00f4te, la proc\u00e9dure <code>PROC EXPORT<\/code> adopte une politique conservatrice : elle refuse d&rsquo;alt\u00e9rer l&rsquo;int\u00e9grit\u00e9 de l&rsquo;\u00e9l\u00e9ment existant, interrompt son traitement sans modifier la cible et consigne une erreur explicite dans le journal d&rsquo;ex\u00e9cution. Bien que protecteur, ce comportement par d\u00e9faut paralyse les flux de production it\u00e9ratifs, tels que les calculs statistiques nocturnes ou les pipelines d&rsquo;int\u00e9gration continue n\u00e9cessitant l&rsquo;actualisation p\u00e9riodique des extractions.<\/p>\n<p>L&rsquo;int\u00e9gration de l&rsquo;option <code>REPLACE<\/code> au sein de l&rsquo;instruction principale <code>PROC EXPORT<\/code> neutralise cette restriction en autorisant explicitement l&rsquo;\u00e9crasement de la ressource cible. Positionn\u00e9e \u00e0 la fin de l&rsquo;instruction principale avant le point-virgule terminal, elle signale au syst\u00e8me d&rsquo;exploitation sous-jacent l&rsquo;ouverture du fichier physique en mode de troncature puis d&rsquo;\u00e9criture (mode <code>w<\/code> standard en langage C). Cependant, l&rsquo;usage de cette option engage la responsabilit\u00e9 m\u00e9thodologique de l&rsquo;analyste. Dans des protocoles de recherche soumis \u00e0 des exigences d&rsquo;auditabilit\u00e9 stricte (tels que les essais cliniques r\u00e9gis par les normes de la <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.fda.gov\">FDA<\/a> ou de l&rsquo;<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.ema.europa.eu\">EMA<\/a>), l&rsquo;\u00e9crasement silencieux d&rsquo;un fichier de r\u00e9sultats peut d\u00e9truire de mani\u00e8re irr\u00e9versible une version historis\u00e9e de r\u00e9f\u00e9rence.<\/p>\n<p>De surcro\u00eet, le comportement de l&rsquo;option <code>REPLACE<\/code> est tributaire des privil\u00e8ges de s\u00e9curit\u00e9 du syst\u00e8me d&rsquo;exploitation h\u00f4te. Sous les environnements Microsoft Windows, si le fichier cible est simultan\u00e9ment ouvert en lecture exclusive par un logiciel tiers tel que Microsoft Excel, la tentative d&rsquo;\u00e9crasement provoquera un \u00e9chec critique de verrouillage (<em>File Lock Violation<\/em>), g\u00e9n\u00e9rant une exception SAS non r\u00e9cup\u00e9rable. Sous les architectures UNIX et Linux, la r\u00e9ussite de l&rsquo;\u00e9crasement d\u00e9pend rigoureusement des masques d&rsquo;autorisation POSIX (<em>file permissions<\/em>) assign\u00e9s au r\u00e9pertoire parent et au fichier lui-m\u00eame. Une conception robuste requiert donc d&rsquo;isoler les r\u00e9pertoires d&rsquo;exportation et de valider l&rsquo;absence de processus concurrents avant toute \u00e9criture destructive.<\/p>\n<h3>3.2 S\u00e9lection des sous-ensembles d&rsquo;observations et de variables<\/h3>\n<p>L&rsquo;exportation brute d&rsquo;une table analytique compl\u00e8te est fr\u00e9quemment contre-productive et inefficace. Dans le cadre d&rsquo;enqu\u00eates psychologiques ou d&rsquo;\u00e9tudes \u00e9pid\u00e9miologiques longitudinales, les tables SAS contiennent r\u00e9guli\u00e8rement des centaines de variables auxiliaires (variables de travail, indicateurs de contr\u00f4le, cl\u00e9s de jointure techniques) et des millions d&rsquo;enregistrements dont seule une fraction restreinte s&rsquo;av\u00e8re requise pour les mod\u00e9lisations externes. L&rsquo;application d&rsquo;un filtrage en amont, directement orchestr\u00e9 au sein de l&rsquo;option <code>DATA=<\/code>, constitue une bonne pratique fondamentale pour limiter l&#8217;empreinte m\u00e9moire et acc\u00e9l\u00e9rer les temps de transfert I\/O (Entr\u00e9es\/Sorties).<\/p>\n<p>SAS permet d&rsquo;adjoindre directement des options de table entre parenth\u00e8ses \u00e0 la suite du nom de la table source. Les options <code>KEEP=<\/code> et <code>DROP=<\/code> permettent de red\u00e9finir s\u00e9lectivement le vecteur des colonnes \u00e0 transmettre au moteur d&rsquo;exportation. L&rsquo;option <code>KEEP=<\/code> sp\u00e9cifie de mani\u00e8re exhaustive les seules variables autoris\u00e9es \u00e0 int\u00e9grer le fichier CSV final, tandis que l&rsquo;option <code>DROP=<\/code> exclut les variables d\u00e9clar\u00e9es superflues. L&rsquo;\u00e9valuation de ces options s&rsquo;op\u00e8re avant la phase de s\u00e9rialisation : les colonnes \u00e9cart\u00e9es ne sont jamais trait\u00e9es par le descripteur d&rsquo;exportation, ce qui all\u00e8ge consid\u00e9rablement la charge computationnelle du processeur.<\/p>\n<p>Parall\u00e8lement au filtrage des attributs, la s\u00e9lection dimensionnelle des observations s&rsquo;effectue via l&rsquo;option <code>WHERE=<\/code>. Cette clause accepte l&rsquo;ensemble des op\u00e9rateurs logiques et bool\u00e9ens support\u00e9s par le moteur SQL et l&rsquo;\u00e9tape <code>DATA<\/code> de SAS. Par exemple, l&rsquo;expression suivante illustre une s\u00e9lection conjointe hautement cibl\u00e9e :<\/p>\n<p><code>PROC EXPORT DATA=recherche.cohortes_psychometrie (KEEP=id_patient age score_anxiete statut_inclusion WHERE=(statut_inclusion=1 AND age &gt;= 18))<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/data\/exports\/echantillon_valide.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\nRUN;<\/code><\/p>\n<p>Cette approche chirurgicale garantit que seules les observations pertinentes d&rsquo;adultes inclus sont extraites, tout en limitant le fichier texte aux colonnes essentielles. L&rsquo;impact de cette optimisation sur les volum\u00e9tries colossales est direct : le fichier CSV r\u00e9sultant ne souffre d&rsquo;aucune surcharge textuelle superflue, facilitant son ingestion imm\u00e9diate dans des langages comme Python ou Julia pour des traitements computationnels intensifs.<\/p>\n<h2>4. Exemple 1 : Exportation standard d&rsquo;un jeu de donn\u00e9es vers un fichier CSV avec les param\u00e8tres par d\u00e9faut<\/h2>\n<h3>4.1 Cr\u00e9ation du jeu de donn\u00e9es exp\u00e9rimental et inspection initiale<\/h3>\n<p>Afin de mat\u00e9rialiser concr\u00e8tement les principes expos\u00e9s, construisons une table SAS repr\u00e9sentative d&rsquo;une \u00e9tude quantitative en psychologie clinique. Ce jeu de donn\u00e9es, nomm\u00e9 <code>EVAL_CLINIQUE<\/code>, int\u00e8gre des identifiants alphanum\u00e9riques, des variables cat\u00e9gorielles textuelles, des mesures psychom\u00e9triques continues issues d&rsquo;\u00e9chelles d&rsquo;auto-\u00e9valuation et des scores composites comportant des valeurs d\u00e9cimales. La cr\u00e9ation s&rsquo;effectue classiquement par une \u00e9tape <code>DATA<\/code> aliment\u00e9e par l&rsquo;instruction <code>DATALINES<\/code> :<\/p>\n<p><code>DATA work.eval_clinique;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;LENGTH Participant_ID <span class=\"arabpsy-math-inline\" data-latex=\"8 Diagnostic\">$8 Diagnostic$<\/span>15 Sexe $1;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;INPUT Participant_ID $ Age Sexe $ Score_BDI Score_STAI Poids_Kg;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DATALINES;<br \/>\nSUBJ001 34 F 14.5 42.0 62.4<br \/>\nSUBJ002 45 M 28.0 55.5 81.2<br \/>\nSUBJ003 29 F  8.0 31.0 54.8<br \/>\nSUBJ004 52 M 32.5 61.0 95.0<br \/>\nSUBJ005 38 F 19.0 46.5 68.1<br \/>\n;<br \/>\nRUN;<\/code><\/p>\n<p>Avant d&rsquo;initier la moindre tentative d&rsquo;exportation vers un support d\u00e9limit\u00e9 externe, la rigueur m\u00e9thodologique impose de valider la consistance de la table en m\u00e9moire. Pour ce faire, les proc\u00e9dures <code>PROC CONTENTS<\/code> et <code>PROC PRINT<\/code> doivent \u00eatre syst\u00e9matiquement mobilis\u00e9es. La proc\u00e9dure <code>PROC CONTENTS<\/code> r\u00e9v\u00e8le la structure interne du descripteur : elle certifie que les variables textuelles poss\u00e8dent des longueurs statiques d&rsquo;allocation convenables (\u00e9vitant ainsi les gaspillages de m\u00e9moire) et que les variables num\u00e9riques sont encod\u00e9es selon la repr\u00e9sentation binaire IEEE \u00e0 virgule flottante sur 8 octets standard de SAS. L&rsquo;inspection des cinq premi\u00e8res lignes via <code>PROC PRINT<\/code> permet d&rsquo;attester l&rsquo;absence de valeurs aberrantes imm\u00e9diates ou de d\u00e9calages de colonnes provoqu\u00e9s par une mauvaise lecture des d\u00e9limiteurs dans <code>DATALINES<\/code>.<\/p>\n<p>Cette phase de validation pr\u00e9-exportation est primordiale : exporter une table sans avoir certifi\u00e9 son int\u00e9grit\u00e9 intrins\u00e8que \u00e9quivaut \u00e0 propager des erreurs invisibles vers des syst\u00e8mes tiers. D\u00e8s lors que la table est certifi\u00e9e exempte d&rsquo;anomalies de parsing, le processus d&rsquo;extraction s\u00e9rialis\u00e9e peut \u00eatre amorc\u00e9 en toute s\u00e9curit\u00e9.<\/p>\n<figure class=\"wpt-preserved-image\"><img fetchpriority=\"high\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/export11-1.jpg\" alt=\"\" \/><\/figure>\n<h3>4.2 Application du script standard PROC EXPORT<\/h3>\n<p>L&rsquo;exportation standardis\u00e9e de notre table <code>EVAL_CLINIQUE<\/code> s&rsquo;op\u00e8re par l&rsquo;invocation de la proc\u00e9dure <code>PROC EXPORT<\/code>, en ciblant un r\u00e9pertoire d\u00e9di\u00e9 du syst\u00e8me de fichiers local ou distant. Nous appliquons les param\u00e8tres conventionnels par d\u00e9faut pour observer le comportement natif du moteur :<\/p>\n<p><code>PROC EXPORT DATA=work.eval_clinique<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/recherche\/projets\/output_standard.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\nRUN;<\/code><\/p>\n<p>\u00c0 la soumission de ce bloc d&rsquo;instructions, le journal SAS restitue une s\u00e9quence d&rsquo;informations attestant de la prise en charge du traitement. Le message cl\u00e9 consign\u00e9 dans la console ressemble typiquement \u00e0 la formulation suivante : <em>\u00ab\u00a0NOTE: \/recherche\/projets\/output_standard.csv was successfully created.\u00a0\u00bb<\/em>, assorti de la volum\u00e9trie pr\u00e9cise du nombre d&rsquo;enregistrements trait\u00e9s et du d\u00e9compte temporel de l&rsquo;op\u00e9ration. L&rsquo;absence absolue de messages du type <code>WARNING: Truncated record<\/code> ou <code>ERROR: File could not be locked<\/code> confirme le succ\u00e8s transactionnel.<\/p>\n<p>L&rsquo;ouverture du fichier <code>output_standard.csv<\/code> g\u00e9n\u00e9r\u00e9, effectu\u00e9e \u00e0 l&rsquo;aide d&rsquo;un \u00e9diteur de texte brut non formateur (tel que Vim sous Linux, Notepad++ sous Windows ou TextEdit en mode texte pur sous macOS), permet de constater la mat\u00e9rialisation physique des donn\u00e9es :<\/p>\n<p><code>Participant_ID,Age,Sexe,Score_BDI,Score_STAI,Poids_Kg<br \/>\nSUBJ001,34,F,14.5,42,62.4<br \/>\nSUBJ002,45,M,28,55.5,81.2<br \/>\nSUBJ003,29,F,8,31,54.8<br \/>\nSUBJ004,52,M,32.5,61,95<br \/>\nSUBJ005,38,F,19,46.5,68.1<\/code><\/p>\n<p>L&rsquo;examen de cette sortie brute met en lumi\u00e8re l&rsquo;application rigoureuse des r\u00e8gles par d\u00e9faut de <code>DBMS=CSV<\/code> : la premi\u00e8re ligne accueille fid\u00e8lement les noms des variables SAS issus du descripteur, servant d&rsquo;en-t\u00eate de colonnes. Les champs num\u00e9riques sont convertis en cha\u00eenes d\u00e9cimales utilisant le point typographique anglo-saxon. Aucun guillemet superflu n&rsquo;est ins\u00e9r\u00e9 autour des cha\u00eenes de caract\u00e8res alphanum\u00e9riques simples qui ne contiennent aucun espace ni caract\u00e8re de rupture. La concordance structurelle entre l&rsquo;objet r\u00e9sidant dans la biblioth\u00e8que SAS et le fichier plat sur disque est totale et pr\u00eate pour l&rsquo;ingestion externe.<\/p>\n<h2>5. Gestion des d\u00e9limiteurs personnalis\u00e9s et options sp\u00e9cifiques au format d\u00e9limit\u00e9 (DBMS=DLM)<\/h2>\n<h3>5.1 Substitution du s\u00e9parateur virgule par le point-virgule ou la tabulation<\/h3>\n<p>L&rsquo;usage de la virgule comme s\u00e9parateur de champs, bien qu&rsquo;universel dans les pays anglo-saxons et au sein des environnements d&rsquo;apprentissage machine, pose des d\u00e9fis m\u00e9thodologiques majeurs dans l&rsquo;espace francophone et europ\u00e9en. Dans de nombreux pays d&rsquo;Europe continentale, la norme typographique standard pour s\u00e9parer la partie enti\u00e8re de la partie fractionnaire d&rsquo;un nombre r\u00e9el n&rsquo;est pas le point, mais la virgule d\u00e9cimale. Par cons\u00e9quent, lors de l&rsquo;ouverture directe d&rsquo;un fichier CSV standardis\u00e9 sous une version europ\u00e9enne de Microsoft Excel, le moteur tableur tente d&rsquo;interpr\u00e9ter les virgules comme des d\u00e9marcations de colonnes, fragmentant les nombres d\u00e9cimaux en deux cellules distinctes et ruinant instantan\u00e9ment l&rsquo;int\u00e9grit\u00e9 analytique du fichier.<\/p>\n<p>Pour parer \u00e0 cette incompatibilit\u00e9 structurelle sans d\u00e9naturer la pr\u00e9cision num\u00e9rique, la proc\u00e9dure <code>PROC EXPORT<\/code> propose une flexibilit\u00e9 d\u00e9terminante en autorisant la substitution du pilote <code>DBMS=CSV<\/code> par le pilote g\u00e9n\u00e9rique <code>DBMS=DLM<\/code> (pour <em>Delimited<\/em>). L&#8217;emploi de cet identifiant g\u00e9n\u00e9rique d\u00e9bloque l&rsquo;instruction d\u00e9clarative compl\u00e9mentaire <code>DELIMITER=<\/code>, au sein de laquelle l&rsquo;analyste peut sp\u00e9cifier manuellement le caract\u00e8re s\u00e9parateur de son choix. Pour les environnements de travail europ\u00e9ens, le point-virgule (<code>;<\/code>) constitue le standard de r\u00e9f\u00e9rence absolu :<\/p>\n<p><code>PROC EXPORT DATA=work.eval_clinique<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/recherche\/projets\/output_europe.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=DLM<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DELIMITER=';';<br \/>\nRUN;<\/code><\/p>\n<p>Dans d&rsquo;autres configurations informatiques de pointe, notamment lors du transfert de donn\u00e9es massives vers des clusters de calcul distribu\u00e9 exploitant des frameworks de type Apache Hadoop ou Spark, le d\u00e9limiteur tabulation (<em>Tab-Separated Values<\/em> ou TSV) est fr\u00e9quemment exig\u00e9 en raison de son absence quasi totale au sein des cha\u00eenes textuelles libres. SAS prend en charge cette variante de deux mani\u00e8res \u00e9quivalentes : soit par l&rsquo;utilisation de l&rsquo;identifiant d\u00e9di\u00e9 <code>DBMS=TAB<\/code>, soit par la d\u00e9claration du code hexad\u00e9cimal de la tabulation horizontale via <code>DELIMITER='09'x;<\/code> sous <code>DBMS=DLM<\/code>. Cette adaptabilit\u00e9 garantit une transition transparente vers n&rsquo;importe quelle architecture cliente sans requ\u00e9rir d&rsquo;outils de conversion de flux post-traitement.<\/p>\n<h3>5.2 Contr\u00f4le des guillemets d&rsquo;encadrement des cha\u00eenes textuelles<\/h3>\n<p>Le traitement des donn\u00e9es observationnelles en sciences humaines, sociales et m\u00e9dicales implique fr\u00e9quemment la manipulation de variables textuelles qualitatives : verbatim de patients, comptes-rendus d&rsquo;entretiens psychologiques ou commentaires cliniques libres. Ces observations ont la particularit\u00e9 intrins\u00e8que de contenir des caract\u00e8res qui entrent en collision directe avec la structure du fichier d&rsquo;exportation : des virgules, des points-virgules, des apostrophes ou m\u00eame des retours \u00e0 la ligne imbriqu\u00e9s.<\/p>\n<p>Le comportement conventionnel de la proc\u00e9dure <code>PROC EXPORT<\/code> repose sur un m\u00e9canisme d&rsquo;encadrement adaptatif. D\u00e8s lors qu&rsquo;une variable de type caract\u00e8re renferme en son sein le caract\u00e8re d\u00e9clar\u00e9 comme d\u00e9limiteur de champs, le moteur ins\u00e8re automatiquement des guillemets doubles (<code>\"<\/code>) autour de la cha\u00eene incrimin\u00e9e afin de signaler aux parseurs tiers que le d\u00e9limiteur textuel fait partie int\u00e9grante de la donn\u00e9e et ne marque pas un changement de colonne. Si la cha\u00eene textuelle contient elle-m\u00eame des guillemets doubles natifs, la proc\u00e9dure applique le standard d&rsquo;\u00e9chappement universel <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/tools.ietf.org\/html\/rfc4180\">RFC 4180<\/a> en doublant le caract\u00e8re d&rsquo;\u00e9chappement (<code>\"\"<\/code>).<\/p>\n<p>Toutefois, certains syst\u00e8mes r\u00e9cepteurs ou pipelines d&rsquo;ingestion SQL stricts exigent un encadrement syst\u00e9matique de <em>toutes<\/em> les colonnes de type caract\u00e8re (<em>quote-all policy<\/em>), ind\u00e9pendamment de la pr\u00e9sence ou de l&rsquo;absence de caract\u00e8res d\u00e9limiteurs, afin d&rsquo;\u00e9liminer toute ambigu\u00eft\u00e9 lors de la d\u00e9termination des types de donn\u00e9es par inf\u00e9rence automatique. Inversement, d&rsquo;autres syst\u00e8mes archa\u00efques rejettent cat\u00e9goriquement la pr\u00e9sence du moindre guillemet. Bien que <code>PROC EXPORT<\/code> offre un contr\u00f4le basique, la ma\u00eetrise chirurgicale fine de ces r\u00e8gles d&rsquo;encadrement trouve ses limites sous ce module pr\u00e9-compil\u00e9. Lorsqu&rsquo;un contr\u00f4le absolu sur la politique de citation textuelle est requis par le cahier des charges, l&rsquo;analyste doit d\u00e9laisser la proc\u00e9dure automatis\u00e9e au profit de l&rsquo;\u00e9tape <code>DATA<\/code> programm\u00e9e avec l&rsquo;instruction <code>FILE<\/code>, d\u00e9montrant une nouvelle fois la compl\u00e9mentarit\u00e9 des approches disponibles sous SAS.<\/p>\n<h2>6. Contr\u00f4le pr\u00e9cis des m\u00e9tadonn\u00e9es : Gestion des noms de variables et des libell\u00e9s (PUTNAMES et LABEL)<\/h2>\n<h3>6.1 Inclusion ou suppression de l&rsquo;en-t\u00eate de colonnes avec PUTNAMES<\/h3>\n<p>L&rsquo;int\u00e9gration de la premi\u00e8re ligne au sein d&rsquo;un fichier d\u00e9limit\u00e9, traditionnellement consacr\u00e9e aux identifiants nominatifs des colonnes, constitue une convention standardis\u00e9e mais non universelle. Dans de nombreux sc\u00e9narios de gestion de donn\u00e9es avanc\u00e9e, la pr\u00e9sence d&rsquo;une telle ligne d&rsquo;en-t\u00eate est pr\u00e9judiciable. C&rsquo;est notamment le cas lorsque le fichier CSV g\u00e9n\u00e9r\u00e9 est destin\u00e9 \u00e0 alimenter un processus d&rsquo;ajout s\u00e9quentiel (<em>append mode<\/em>) au sein d&rsquo;un entrep\u00f4t de donn\u00e9es relationnel pr\u00e9existant, ou lorsqu&rsquo;il s&rsquo;agit de fragmenter une table gigantesque en dizaines de segments textuels partitionn\u00e9s destin\u00e9s \u00e0 \u00eatre concat\u00e9n\u00e9s au niveau binaire via des commandes syst\u00e8mes telles que <code>cat<\/code> sous UNIX ou <code>copy<\/code> sous Windows.<\/p>\n<p>Pour ma\u00eetriser ce comportement, la proc\u00e9dure <code>PROC EXPORT<\/code> expose l&rsquo;instruction bool\u00e9enne <code>PUTNAMES<\/code>. Par d\u00e9faut, celle-ci est implicitement fix\u00e9e \u00e0 <code>PUTNAMES=YES<\/code>, for\u00e7ant le moteur \u00e0 lire les m\u00e9tadonn\u00e9es de colonnes dans le descripteur et \u00e0 les s\u00e9rialiser sur la premi\u00e8re ligne d&rsquo;enregistrement. La d\u00e9claration explicite de <code>PUTNAMES=NO;<\/code> d\u00e9sactive instantan\u00e9ment cette m\u00e9canique :<\/p>\n<p><code>PROC EXPORT DATA=work.eval_clinique<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/recherche\/projets\/donnees_sans_entete.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PUTNAMES=NO;<br \/>\nRUN;<\/code><\/p>\n<p>Le fichier CSV g\u00e9n\u00e9r\u00e9 sous cette configuration commence directement \u00e0 la premi\u00e8re observation empirique de l&rsquo;\u00e9chantillon. Cette rigueur structurelle permet d&rsquo;assurer une sym\u00e9trie parfaite entre le nombre total de lignes inscrites dans le fichier physique (d\u00e9termin\u00e9 par des outils syst\u00e8mes comme <code>wc -l<\/code> sous Linux) et le nombre d&rsquo;observations effectives h\u00e9berg\u00e9es dans la table SAS source (observable dans la macro-variable <code>&amp;SYSNOBS<\/code>). Cette stricte \u00e9galit\u00e9 num\u00e9rique \u00e9limine les distorsions d&rsquo;indexation lors des contr\u00f4les automatis\u00e9s d&rsquo;int\u00e9grit\u00e9 au sein des cha\u00eenes d&rsquo;int\u00e9gration continue.<\/p>\n<h3>6.2 Arbitrage entre noms de variables normalis\u00e9s et libell\u00e9s descriptifs (LABEL)<\/h3>\n<p>L&rsquo;un des atouts conceptuels majeurs du syst\u00e8me de m\u00e9tadonn\u00e9es SAS r\u00e9side dans la dissociation nette entre le nom technique de la variable (qui est traditionnellement restreint \u00e0 32 caract\u00e8res alphanum\u00e9riques sans espaces ni caract\u00e8res sp\u00e9ciaux) et son \u00e9tiquette textuelle descriptive (le <code>LABEL<\/code>), qui peut s&rsquo;\u00e9tendre jusqu&rsquo;\u00e0 256 caract\u00e8res et accueillir une description litt\u00e9raire compl\u00e8te de la mesure. Dans les bases de donn\u00e9es issues de questionnaires psychom\u00e9triques complexes, le nom de la variable prend typiquement la forme d&rsquo;un acronyme cod\u00e9 (par exemple <code>BDI_ITEM_01<\/code>), tandis que le libell\u00e9 consigne l&rsquo;\u00e9nonc\u00e9 exact pr\u00e9sent\u00e9 au r\u00e9pondant (<em>\u00ab\u00a0Je ne me sens pas triste au quotidien\u00a0\u00bb<\/em>).<\/p>\n<p>Par d\u00e9faut, l&rsquo;instruction <code>DBMS=CSV<\/code> s\u00e9rialise le nom technique de la variable en t\u00eate de fichier pour garantir la compatibilit\u00e9 computationnelle avec les langages de programmation en aval. Cependant, lorsque les fichiers CSV sont destin\u00e9s \u00e0 \u00eatre transmis \u00e0 des commanditaires d&rsquo;\u00e9tudes, des analystes m\u00e9tiers ou des auditeurs institutionnels ne ma\u00eetrisant pas le dictionnaire des variables, l&rsquo;exportation des libell\u00e9s descriptifs longs en lieu et place des noms techniques s&rsquo;av\u00e8re particuli\u00e8rement pertinente. Pour activer cette substitution, l&rsquo;analyste int\u00e8gre l&rsquo;option de proc\u00e9dure <code>LABEL<\/code> au sein de l&rsquo;instruction <code>PROC EXPORT<\/code> :<\/p>\n<p><code>PROC EXPORT DATA=work.eval_clinique<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/recherche\/projets\/rapport_descriptif.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;LABEL;<br \/>\nRUN;<\/code><\/p>\n<p>Lorsque cette option est active, SAS v\u00e9rifie pour chaque variable la pr\u00e9sence d&rsquo;un libell\u00e9 associ\u00e9 au sein du descripteur. S&rsquo;il existe, c&rsquo;est ce texte descriptif qui est imprim\u00e9 dans l&rsquo;en-t\u00eate du fichier CSV ; dans le cas contraire, la proc\u00e9dure bascule par d\u00e9faut sur le nom technique standard. Bien que cette pratique conf\u00e8re une lisibilit\u00e9 imm\u00e9diate aux documents de synth\u00e8se, elle exige une vigilance m\u00e9thodologique extr\u00eame : si les \u00e9tiquettes de colonnes contiennent des virgules ou des caract\u00e8res non conformes aux conventions syntaxiques des bases de donn\u00e9es de destination, elles compliquent la r\u00e9tro-ing\u00e9nierie et l&rsquo;indexation algorithmique ult\u00e9rieure. L&rsquo;arbitrage entre <code>NAME<\/code> et <code>LABEL<\/code> doit donc r\u00e9sulter d&rsquo;une analyse des besoins de la phase de cycle de vie des donn\u00e9es.<\/p>\n<h2>7. Exportation avanc\u00e9e avec l&rsquo;\u00e9tape DATA et l&rsquo;instruction FILE (Alternative \u00e0 PROC EXPORT)<\/h2>\n<h3>7.1 Architecture fondamentale de l&rsquo;instruction FILE pour le flux CSV<\/h3>\n<p>Bien que la proc\u00e9dure <code>PROC EXPORT<\/code> constitue une solution pratique et concise, elle dissimule les m\u00e9canismes d&rsquo;\u00e9criture sous une couche d&rsquo;abstraction qui prive l&rsquo;ing\u00e9nieur de donn\u00e9es de tout contr\u00f4le microscopique. Lorsque les exigences op\u00e9rationnelles imposent un formatage personnalis\u00e9 \u00e0 chaque cellule, une \u00e9criture conditionnelle ligne par ligne ou une optimisation extr\u00eame des performances I\/O, le recours \u00e0 l&rsquo;\u00e9tape <code>DATA<\/code> programm\u00e9e repr\u00e9sente l&rsquo;approche architecturale reine. Au c\u0153ur de ce paradigme r\u00e9side l&rsquo;instruction <code>FILE<\/code>, coupl\u00e9e au modificateur syntaxique <code>DSD<\/code> (<em>Delimiter-Sensitive Data<\/em>).<\/p>\n<p>L&rsquo;instruction <code>FILE<\/code> redirige le canal de sortie standard du moteur SAS vers une destination physique externe. L&rsquo;adjonction de l&rsquo;option <code>DSD<\/code> modifie substantiellement la m\u00e9canique interne de traitement textuel du syst\u00e8me :<\/p>\n<ul>\n<li>Elle assigne par d\u00e9faut la virgule comme d\u00e9limiteur physique de champs.<\/li>\n<li>Elle g\u00e8re automatiquement l&rsquo;encadrement des cha\u00eenes textuelles : toute variable caract\u00e8re contenant un d\u00e9limiteur de champs, des guillemets natifs ou des sauts de ligne est syst\u00e9matiquement encapsul\u00e9e par des guillemets doubles.<\/li>\n<li>Elle traite avec rigueur les d\u00e9limiteurs cons\u00e9cutifs comme des cellules vides, pr\u00e9venant tout d\u00e9calage d&rsquo;indices de colonnes lors de la pr\u00e9sence de valeurs manquantes.<\/li>\n<li>Elle \u00e9limine les guillemets superflus autour des variables alphanum\u00e9riques simples, pr\u00e9servant ainsi la compacit\u00e9 volum\u00e9trique du flux textuel.<\/li>\n<\/ul>\n<p>Pour introduire manuellement une ligne d&rsquo;en-t\u00eate au sein d&rsquo;une \u00e9tape <code>DATA<\/code> s\u00e9quentielle, l&rsquo;analyste interroge la variable automatique <code>_N_<\/code>. Cette variable syst\u00e8me interne, incr\u00e9ment\u00e9e de 1 \u00e0 chaque it\u00e9ration de la boucle de l&rsquo;\u00e9tape <code>DATA<\/code>, permet d&rsquo;ex\u00e9cuter un bloc d&rsquo;instructions de mani\u00e8re unique lors de la lecture du tout premier enregistrement, garantissant ainsi l&rsquo;impression unique des m\u00e9tadonn\u00e9es de colonnes avant le d\u00e9but de l&rsquo;injection des observations.<\/p>\n<figure class=\"wpt-preserved-image\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/csv11.jpg\" alt=\"\" \/><\/figure>\n<h3>7.2 Programmation chirurgicale de la sortie avec l&rsquo;instruction PUT<\/h3>\n<p>L&rsquo;\u00e9criture effective des donn\u00e9es au sein du flux physique est assur\u00e9e par l&rsquo;instruction <code>PUT<\/code>, agissant de concert avec le pointeur d&rsquo;enregistrement du Program Data Vector (PDV). L&rsquo;association de <code>PUT<\/code> et du mot-cl\u00e9 <code>_ALL_<\/code> ou de la liste explicite des variables combin\u00e9e \u00e0 la notation de formatage nomm\u00e9e (<em>named input\/output<\/em>) permet une libert\u00e9 absolue de personnalisation. Consid\u00e9rons l&rsquo;impl\u00e9mentation industrielle suivante, traduisant l&rsquo;exportation d&rsquo;une table clinique complexe :<\/p>\n<p><code>DATA _NULL_;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;SET work.eval_clinique;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;FILE \"\/recherche\/projets\/export_chirurgical.csv\" DSD DLM=';' LRECL=32767;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* \u00c9criture dynamique de l'en-t\u00eate \u00e0 la premi\u00e8re it\u00e9ration *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;IF _N_ = 1 THEN DO;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUT \"IDENTIFIANT;AGE_ANNEES;GENRE;SCORE_DEPRESSION;SCORE_ANXIETE;POIDS_KG\";<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;END;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* Application conditionnelle et formatage explicite *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PUT Participant_ID<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age 3.<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sexe $1.<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Score_BDI 6.2<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Score_STAI 6.2<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Poids_Kg 8.3;<br \/>\nRUN;<\/code><\/p>\n<p>Plusieurs aspects m\u00e9thodologiques de ce script m\u00e9ritent une attention approfondie. L&rsquo;usage de la pseudo-table cible <code>DATA _NULL_;<\/code> constitue une r\u00e8gle d&rsquo;or pour optimiser la m\u00e9moire : il indique \u00e0 SAS qu&rsquo;aucune nouvelle table binaire ne doit \u00eatre compil\u00e9e ou stock\u00e9e dans la biblioth\u00e8que <code>WORK<\/code>, concentrant ainsi 100 % de la bande passante processeur et m\u00e9moire sur le streaming direct du flux textuel vers le disque. L&rsquo;option <code>LRECL=32767<\/code> (<em>Logical Record Length<\/em>) \u00e9tend pr\u00e9ventivement la capacit\u00e9 du tampon de ligne pour accueillir sans risque de troncature des cha\u00eenes textuelles tr\u00e8s \u00e9tendues. Enfin, le passage direct de sp\u00e9cifications de formats num\u00e9riques (tels que <code>6.2<\/code> ou <code>8.3<\/code>) dans l&rsquo;instruction <code>PUT<\/code> permet de figer la pr\u00e9cision d\u00e9cimale au moment exact de la s\u00e9rialisation, \u00e9liminant les impr\u00e9cisions d&rsquo;arrondi binaire inh\u00e9rentes aux repr\u00e9sentations \u00e0 virgule flottante.<\/p>\n<h2>8. Traitement des valeurs manquantes, des caract\u00e8res sp\u00e9ciaux et du formatage num\u00e9rique lors de l&rsquo;export<\/h2>\n<h3>8.1 Gestion rigoureuse des valeurs manquantes dans les analyses quantitatives<\/h3>\n<p>L&rsquo;un des d\u00e9fis les plus redoutables de la manipulation de donn\u00e9es quantitatives r\u00e9side dans le traitement rigoureux de l&rsquo;incompl\u00e9tude informationnelle. Dans le moteur d&rsquo;ex\u00e9cution interne de SAS, une observation num\u00e9rique manquante n&rsquo;est pas repr\u00e9sent\u00e9e par un \u00e9tat nul ind\u00e9termin\u00e9 ou une absence d&rsquo;octets, mais par une valeur binaire sp\u00e9ciale mat\u00e9rialis\u00e9e \u00e0 l&rsquo;affichage par un point standard (<code>.<\/code>), ou par l&rsquo;un des 27 codes de valeurs manquantes sp\u00e9ciales (<code>.A<\/code> jusqu&rsquo;\u00e0 <code>.Z<\/code> et <code>._<\/code>). Ces valeurs manquantes sp\u00e9ciales sont fr\u00e9quemment mobilis\u00e9es dans les \u00e9tudes cliniques pour cat\u00e9goriser la nature de l&rsquo;absence (par exemple : <code>.N<\/code> = Non applicable, <code>.R<\/code> = Refus de r\u00e9pondre, <code>.M<\/code> = Donn\u00e9e mat\u00e9rielle perdue).<\/p>\n<p>Lors de l&rsquo;application de <code>PROC EXPORT<\/code> avec le pilote <code>DBMS=CSV<\/code>, le comportement par d\u00e9faut de SAS consiste \u00e0 transcrire les valeurs manquantes num\u00e9riques standards sous la forme d&rsquo;un point litt\u00e9ral (<code>.<\/code>) ou d&rsquo;un champ vide d\u00e9limit\u00e9 par deux s\u00e9parateurs successifs, selon la version logicielle et les options syst\u00e8mes actives. L&rsquo;injection d&rsquo;un point textuel (<code>.<\/code>) au sein d&rsquo;une colonne autrement purement num\u00e9rique peut avoir des cons\u00e9quences d\u00e9sastreuses lors de l&rsquo;ingestion par des biblioth\u00e8ques externes telles que <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\">Pandas<\/a> en Python ou le package <code>readr<\/code> en R. Ces parseurs peuvent malencontreusement convertir l&rsquo;int\u00e9gralit\u00e9 de la colonne en type objet textuel (<code>object<\/code> ou <code>string<\/code>) pour accueillir ce caract\u00e8re typographique, paralysant les calculs math\u00e9matiques subs\u00e9quents.<\/p>\n<p>Pour garantir une conformit\u00e9 m\u00e9thodologique absolue lors de l&rsquo;exportation via l&rsquo;\u00e9tape <code>DATA<\/code>, l&rsquo;analyste neutralise l&rsquo;option syst\u00e8me globale des valeurs manquantes en configurant <code>OPTIONS MISSING='';<\/code>. Cette directive indique \u00e0 SAS de ne s\u00e9rialiser aucun caract\u00e8re physique lorsqu&rsquo;une variable num\u00e9rique est manquante, produisant la s\u00e9quence standard <code>...;valeur_precedente;;valeur_suivante;...<\/code> attendue par l&rsquo;ensemble des parseurs industriels. Si, au contraire, les codes de valeurs manquantes sp\u00e9ciales doivent \u00eatre pr\u00e9serv\u00e9s \u00e0 des fins d&rsquo;imputation multiple, une transformation pr\u00e9alable des colonnes num\u00e9riques en repr\u00e9sentations alphanum\u00e9riques explicites via la fonction <code>PUT()<\/code> devient obligatoire afin de traduire textuellement <code>.R<\/code> en <code>\"REFUS\"<\/code> ou <code>\"NA\"<\/code> avant le d\u00e9clenchement de l&rsquo;exportation.<\/p>\n<h3>8.2 Pr\u00e9servation de l&rsquo;int\u00e9grit\u00e9 des dates, heures et nombres \u00e0 virgule flottante<\/h3>\n<p>Dans l&rsquo;\u00e9cosyst\u00e8me SAS, les variables temporelles ne constituent pas un type de donn\u00e9es physique distinct : les dates sont stock\u00e9es sous la forme d&rsquo;entiers repr\u00e9sentant le nombre de jours \u00e9coul\u00e9s depuis le 1er janvier 1960, tandis que les valeurs d&rsquo;horodatage (<code>DATETIME<\/code>) quantifient le nombre de secondes depuis cette m\u00eame date d&rsquo;origine. Si une table contenant des variables temporelles est export\u00e9e sans l&rsquo;application d&rsquo;un format de pr\u00e9sentation explicite, <code>PROC EXPORT<\/code> retranscrit directement ces nombres entiers sous-jacents. Le destinataire du fichier CSV se retrouve ainsi confront\u00e9 \u00e0 des identifiants scalaires tels que <code>23456<\/code> au lieu de la cha\u00eene lisible correspondante, introduisant une confusion temporelle majeure.<\/p>\n<p>Pour \u00e9liminer tout risque d&rsquo;inversion s\u00e9mantique, la r\u00e8gle m\u00e9thodologique fondamentale consiste \u00e0 figer les variables temporelles sous une norme universelle standardis\u00e9e, prioritairement la norme internationale <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.iso.org\/iso-8601-date-and-time-format.html\">ISO 8601 (YYYY-MM-DD)<\/a>, avant l&rsquo;exportation. Cette standardisation s&rsquo;ex\u00e9cute avec \u00e9l\u00e9gance via l&rsquo;instruction <code>FORMAT<\/code> :<\/p>\n<p><code>PROC EXPORT DATA=work.cohortes (KEEP=patient_id date_visite score)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/recherche\/projets\/dates_normalisees.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\nRUN;<\/code><\/p>\n<p>En amont de cette proc\u00e9dure, il suffit d&rsquo;avoir d\u00e9clar\u00e9 au sein de la table ou dans une \u00e9tape transitoire <code>FORMAT date_visite B8601DA10.;<\/code> pour que le flux CSV contienne une structure strictement format\u00e9e sous la forme <code>2024-03-30<\/code>. Cette pr\u00e9caution neutralise le risque r\u00e9current de distorsion entre les conventions anglo-saxonnes (MM\/DD\/YYYY) et europ\u00e9ennes (DD\/MM\/YYYY).<\/p>\n<p>Concernant les mesures psychom\u00e9triques fines, les calculs de latence d&rsquo;\u00e9lectroenc\u00e9phalographie ou les concentrations biochimiques, la pr\u00e9cision des nombres \u00e0 virgule flottante exige une surveillance tout aussi rigoureuse. L&rsquo;utilisation de formats g\u00e9n\u00e9riques par d\u00e9faut de SAS (comme le format d&rsquo;\u00e9criture automatique <code>BEST12.<\/code>) peut tronquer silencieusement des d\u00e9cimales significatives au-del\u00e0 du huiti\u00e8me rang ou basculer inopin\u00e9ment les tr\u00e8s petits nombres vers une notation scientifique exponentielle (ex. <code>1.45E-5<\/code>). Si le syst\u00e8me de r\u00e9ception ne supporte pas la notation exponentielle, l&rsquo;analyste doit formellement assigner des formats d&rsquo;extension num\u00e9rique explicites (par exemple <code>E8601DN16.<\/code> ou des gabarits <code>F12.6<\/code>) pour sanctuariser la r\u00e9solution num\u00e9rique originelle des observations.<\/p>\n<h2>9. Gestion des encodages de caract\u00e8res (UTF-8, Latin1) et compatibilit\u00e9 multiplateforme<\/h2>\n<h3>9.1 R\u00e9solution des conflits d&rsquo;encodage lors du transfert inter-syst\u00e8mes<\/h3>\n<p>L&rsquo;alt\u00e9ration de donn\u00e9es textuelles due \u00e0 des disparit\u00e9s d&rsquo;encodage binaire constitue l&rsquo;une des sources d&rsquo;erreurs les plus pernicieuses en science des donn\u00e9es. Le sympt\u00f4me le plus visible de cette friction est le ph\u00e9nom\u00e8ne de <em>mojibake<\/em>, o\u00f9 des caract\u00e8res accentu\u00e9s courants de la langue fran\u00e7aise (tels que <em>\u00e9<\/em>, <em>\u00e0<\/em>, <em>\u00e7<\/em> ou <em>\u00ea<\/em>) se transforment lors de l&rsquo;exportation en suites incoh\u00e9rentes de symboles (par exemple <code>\u00c3\u00a9<\/code> ou <code>\u00e2\u20acTM<\/code>). Cette corruption d\u00e9grade la qualit\u00e9 des annotations cliniques et peut invalider les analyses s\u00e9mantiques ou de traitement du langage naturel (NLP).<\/p>\n<p>Ce dysfonctionnement s&rsquo;enracine dans la disparit\u00e9 entre la page de code native de la session SAS h\u00f4te et l&rsquo;attente du syst\u00e8me d&rsquo;exploitation cible. Historiquement, les environnements SAS sous Windows fonctionnaient quasi exclusivement sous l&rsquo;encodage mono-octet <code>WLATIN1<\/code> ou <code>ISO-8859-1<\/code>, au sein duquel chaque caract\u00e8re est cod\u00e9 sur un octet unique. Les architectures modernes, les bases de donn\u00e9es r\u00e9parties et les plateformes Web exigent d\u00e9sormais sans exception la norme universelle multi-octets <code>UTF-8<\/code>. Pour \u00e9viter toute distorsion textuelle, la proc\u00e9dure <code>PROC EXPORT<\/code> autorise la sp\u00e9cification imp\u00e9rative de l&rsquo;encodage du fichier de sortie via l&rsquo;option <code>ENCODING=<\/code> :<\/p>\n<p><code>PROC EXPORT DATA=work.eval_clinique<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/recherche\/projets\/donnees_utf8.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;ENCODING=\"utf-8\";<br \/>\nRUN;<\/code><\/p>\n<p>L&rsquo;introduction de ce param\u00e8tre d\u00e9clenche l&rsquo;appel aux biblioth\u00e8ques de transcodage de l&rsquo;International Components for Unicode (ICU) int\u00e9gr\u00e9es dans le runtime SAS. Chaque cha\u00eene textuelle est transcod\u00e9e \u00e0 la vol\u00e9e depuis la page de code interne de la table source vers le format universel UTF-8 lors de son \u00e9criture sur disque. Cette standardisation garantit que le document CSV sera restitu\u00e9 de fa\u00e7on parfaitement transparente et identique sous n&rsquo;importe quel syst\u00e8me d&rsquo;exploitation cible.<\/p>\n<h3>9.2 Gestion des fins de ligne selon l&rsquo;environnement d&rsquo;exploitation (CRLF vs LF)<\/h3>\n<p>Sous la surface d&rsquo;un fichier textuel d\u00e9limit\u00e9, la mat\u00e9rialisation du saut marquant le passage \u00e0 l&rsquo;observation suivante varie substantiellement selon l&rsquo;architecture mat\u00e9rielle et le syst\u00e8me d&rsquo;exploitation sous-jacent. Deux conventions pr\u00e9valent historiquement dans l&rsquo;industrie informatique :<\/p>\n<ul>\n<li>La convention Microsoft Windows, qui utilise deux octets de contr\u00f4le successifs : un retour chariot (<em>Carriage Return<\/em>, ASCII <code>13<\/code> ou <code>r<\/code>) suivi d&rsquo;un saut de ligne (<em>Line Feed<\/em>, ASCII <code>10<\/code> ou <code>n<\/code>), s\u00e9quence cod\u00e9e conventionnellement sous le sigle <code>CRLF<\/code>.<\/li>\n<li>La convention UNIX, Linux et macOS contemporain, qui n&#8217;emploie qu&rsquo;un unique octet de saut de ligne : <code>LF<\/code> (ASCII <code>10<\/code> ou <code>n<\/code>).<\/li>\n<\/ul>\n<p>Cette divergence invisible \u00e0 l&rsquo;\u0153il nu peut paralyser des infrastructures de traitement distribu\u00e9. Si un script SAS ex\u00e9cut\u00e9 sur un serveur central UNIX exporte un fichier CSV destin\u00e9 \u00e0 \u00eatre trait\u00e9 par un outil Windows obsol\u00e8te, ce dernier peut \u00eatre incapable de segmenter les lignes et interpr\u00e9ter l&rsquo;int\u00e9gralit\u00e9 du document comme un enregistrement unique colossal. R\u00e9ciproquement, la pr\u00e9sence de caract\u00e8res <code>CR<\/code> r\u00e9siduels sous Linux peut perturber les scripts d&rsquo;analyse shell ou l&rsquo;ingestion au sein de clusters haute performance.<\/p>\n<p>Dans le cadre d&rsquo;un export avanc\u00e9 orchestr\u00e9 via l&rsquo;\u00e9tape <code>DATA<\/code> et l&rsquo;instruction <code>FILE<\/code>, le contr\u00f4le de cette s\u00e9quence de terminaison s&rsquo;effectue via l&rsquo;option <code>TERMSTR=<\/code> (<em>Termination String<\/em>). Cette directive permet de forcer la convention de fin de ligne ind\u00e9pendamment du syst\u00e8me d&rsquo;exploitation h\u00e9bergeant la session SAS :<\/p>\n<p><code>\/* Exportation sous Linux avec obligation de compatibilit\u00e9 Windows *\/<br \/>\nDATA _NULL_;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;SET work.eval_clinique;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;FILE \"\/recherche\/projets\/target_windows.csv\" DSD DLM=',' TERMSTR=CRLF;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PUT Participant_ID Age Sexe Score_BDI Score_STAI Poids_Kg;<br \/>\nRUN;<\/code><\/p>\n<p>L&rsquo;utilisation explicite de <code>TERMSTR=CRLF<\/code> ou <code>TERMSTR=LF<\/code> sanctuarise le formatage physique des sauts d&rsquo;enregistrements et supprime toute d\u00e9pendance envers les conversions implicites du syst\u00e8me h\u00f4te, consolidant ainsi la portabilit\u00e9 globale des fichiers d&rsquo;extraction.<\/p>\n<h2>10. Optimisation des performances lors de l&rsquo;exportation de volumineux ensembles de donn\u00e9es<\/h2>\n<h3>10.1 Allocation m\u00e9moire et r\u00e9duction des op\u00e9rations d&rsquo;entr\u00e9e\/sortie (I\/O)<\/h3>\n<p>Lorsque la taille des bases de donn\u00e9es \u00e0 exporter passe de quelques milliers \u00e0 des dizaines ou des centaines de millions d&rsquo;observations (comme c&rsquo;est fr\u00e9quemment le cas dans les registres nationaux de sant\u00e9 ou les bases transactionnelles financi\u00e8res), les op\u00e9rations d&rsquo;entr\u00e9e\/sortie sur disque (I\/O) deviennent le goulot d&rsquo;\u00e9tranglement pr\u00e9dominant de l&rsquo;infrastructure. Une proc\u00e9dure d&rsquo;exportation non configur\u00e9e peut immobiliser des ressources de calcul massives pendant des heures simplement en attendant le rafra\u00eechissement des tampons d&rsquo;\u00e9criture physique.<\/p>\n<p>Le levier d&rsquo;optimisation principal r\u00e9side dans l&rsquo;ajustement de la taille et du nombre de m\u00e9moires tampons allou\u00e9es au sous-syst\u00e8me de gestion de fichiers via les options syst\u00e8me globales <code>BUFSIZE=<\/code> et <code>BUFNO=<\/code>. L&rsquo;option <code>BUFSIZE<\/code> d\u00e9termine la taille en octets d&rsquo;un bloc de transfert de donn\u00e9es entre le disque dur et la m\u00e9moire vive, tandis que <code>BUFNO<\/code> dicte le nombre de pages de cache maintenues simultan\u00e9ment en m\u00e9moire. En accroissant temporairement ces m\u00e9triques pour la dur\u00e9e du traitement, l&rsquo;analyste permet \u00e0 SAS de charger des blocs massifs de donn\u00e9es et d&rsquo;ex\u00e9cuter des \u00e9critures group\u00e9es s\u00e9quentielles, r\u00e9duisant radicalement les appels syst\u00e8mes (<em>system calls<\/em>) et la latence m\u00e9canique ou r\u00e9seau :<\/p>\n<p><code>\/* Optimisation des tampons m\u00e9moires pour l'exportation massive *\/<br \/>\nOPTIONS BUFSIZE=64K BUFNO=32;<\/p>\n<p>PROC EXPORT DATA=grands_registres.biomarqueurs_massifs<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/stockage_rapide\/biomarqueurs_complets.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\nRUN;<\/p>\n<p>\/* Restauration des param\u00e8tres par d\u00e9faut *\/<br \/>\nOPTIONS BUFSIZE=DEFAULT BUFNO=DEFAULT;<\/code><\/p>\n<p>Par ailleurs, l&rsquo;existence d&rsquo;index secondaires (fichiers <code>.sas7bndx<\/code>) associ\u00e9s \u00e0 la table source peut d\u00e9grader les performances d&rsquo;exportation si le moteur tente de maintenir la synchronisation des pointeurs. Une bonne pratique consiste \u00e0 d\u00e9sactiver temporairement les index ou \u00e0 s&rsquo;assurer que la lecture de la table s&rsquo;effectue dans l&rsquo;ordre s\u00e9quentiel physique naturel (ordre d&rsquo;insertion) sans forcer de tri m\u00e9moire artificiel.<\/p>\n<figure class=\"wpt-preserved-image\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/french.arabpsychology.com\/wp-content\/uploads\/2026\/09\/csv12.jpg\" alt=\"\" \/><\/figure>\n<h3>10.2 Strat\u00e9gies d&rsquo;exportation en flux direct (Streaming) sans surcharge disque<\/h3>\n<p>L&rsquo;un des pi\u00e8ges r\u00e9currents dans la gestion de donn\u00e9es volumineuses r\u00e9side dans la cr\u00e9ation de tables temporaires interm\u00e9diaires au sein de la biblioth\u00e8que <code>WORK<\/code> pour pr\u00e9parer un sous-ensemble d&rsquo;exportation. Cette pratique entra\u00eene une duplication inutile de l&rsquo;information : les donn\u00e9es sont lues sur le stockage permanent, r\u00e9\u00e9crites sous forme binaire temporaire dans l&rsquo;espace <code>WORK<\/code>, puis relues pour \u00eatre finalement s\u00e9rialis\u00e9es dans le fichier CSV. Cette redondance sature l&rsquo;espace disque scratch des serveurs partag\u00e9s et d\u00e9grade les performances globales.<\/p>\n<p>La solution d&rsquo;ing\u00e9nierie optimale consiste \u00e0 substituer les tables interm\u00e9diaires temporaires par des <em>vues de donn\u00e9es SAS<\/em> (cr\u00e9\u00e9es via l&rsquo;instruction <code>DATA ... \/ VIEW=...<\/code> ou par une instruction <code>PROC SQL CREATE VIEW ... AS<\/code>). Une vue SAS ne stocke physiquement aucune observation sur le disque : elle sauvegarde uniquement la logique algorithmique de transformation sous forme compil\u00e9e. Lors de l&rsquo;appel ult\u00e9rieur de <code>PROC EXPORT<\/code>, ce dernier consomme directement la vue comme s&rsquo;il s&rsquo;agissait d&rsquo;une table mat\u00e9rielle :<\/p>\n<p><code>\/* Cr\u00e9ation d'une vue logique sans duplication physique sur disque *\/<br \/>\nPROC SQL;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;CREATE VIEW work.vue_export_optimale AS<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;SELECT <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id_sujet, <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;score_total, <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(score_total \/ variance_score) AS score_standardise<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;FROM entrepot.donnees_massives<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;WHERE annee_recueil &gt;= 2020;<br \/>\nQUIT;<\/p>\n<p>\/* Exportation en flux continu depuis la vue *\/<br \/>\nPROC EXPORT DATA=work.vue_export_optimale<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"\/data\/exports\/donnees_recentes_stream.csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;DBMS=CSV<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;REPLACE;<br \/>\nRUN;<\/code><\/p>\n<p>Dans ce sc\u00e9nario, les calculs de d\u00e9rivation (tels que la standardisation du score) et le filtrage chronologique s&rsquo;ex\u00e9cutent en m\u00e9moire vive \u00e0 la vol\u00e9e, au fur et \u00e0 mesure que les lignes sont projet\u00e9es dans le fichier CSV. Aucun espace de stockage disque interm\u00e9diaire n&rsquo;est consomm\u00e9, pr\u00e9servant l&rsquo;int\u00e9grit\u00e9 de l&rsquo;infrastructure logicielle sur les serveurs institutionnels tels que SAS Studio ou SAS Enterprise Guide.<\/p>\n<h2>11. R\u00e9solution des anomalies courantes et erreurs de syntaxe dans PROC EXPORT<\/h2>\n<h3>11.1 Diagnostic des erreurs de chemin, de verrous et de permissions de fichiers<\/h3>\n<p>L&rsquo;exploitation quotidienne de la proc\u00e9dure <code>PROC EXPORT<\/code> confronte r\u00e9guli\u00e8rement les analystes \u00e0 des interruptions d&rsquo;ex\u00e9cution dont les causes ne rel\u00e8vent pas de la validit\u00e9 algorithmique du script, mais des interactions conflictuelles avec le syst\u00e8me d&rsquo;exploitation sous-jacent. Trois familles d&rsquo;erreurs structurelles dominent les rapports d&rsquo;incidents :<\/p>\n<p>La premi\u00e8re famille d&rsquo;anomalies concerne les erreurs de chemin physique et de syntaxe de r\u00e9pertoires. Les architectures hybrides modernes impliquent fr\u00e9quemment l&rsquo;utilisation d&rsquo;un client graphique h\u00e9berg\u00e9 sous Microsoft Windows connect\u00e9 \u00e0 un serveur de calcul distant tournant sous Red Hat Enterprise Linux. L&rsquo;utilisation maladroite d&rsquo;antislashs (<code><\/code>) caract\u00e9ristiques de Windows au lieu de slashs (<code>\/<\/code>) conformes aux standards POSIX au sein de l&rsquo;argument <code>OUTFILE=<\/code> provoque un rejet cat\u00e9gorique : <code>ERROR: Physical file does not exist<\/code>. De surcro\u00eet, SAS ne dispose pas par d\u00e9faut de la facult\u00e9 de cr\u00e9er dynamiquement des arborescences de dossiers inexistantes : le chemin cible doit pr\u00e9exister dans sa totalit\u00e9 avant la soumission de la proc\u00e9dure, sous peine de voir l&rsquo;op\u00e9ration avorter.<\/p>\n<p>La seconde anomalie r\u00e9currente est le conflit de verrouillage partag\u00e9 (<em>File Locking Contention<\/em>). Lorsqu&rsquo;un utilisateur a pr\u00e9alablement ouvert une version ant\u00e9rieure du fichier CSV dans un logiciel de bureau comme Microsoft Excel, celui-ci verrouille le fichier physique via un m\u00e9canisme de verrouillage exclusif d&rsquo;\u00e9criture. Lors de la soumission de <code>PROC EXPORT<\/code>, le compilateur SAS \u00e9choue \u00e0 obtenir le handle d&rsquo;\u00e9criture sur le fichier et consigne dans le journal le message redout\u00e9 : <code>ERROR: File is in use by another user or application<\/code>. La r\u00e9solution de ce conflit requiert l&rsquo;arr\u00eat imm\u00e9diat du processus verrouillant ou l&rsquo;attribution d&rsquo;un nom dynamique unique au fichier de sortie afin de contourner l&rsquo;occupation de la ressource.<\/p>\n<p>Enfin, la question des privil\u00e8ges d&rsquo;acc\u00e8s (<em>Permissions Denied<\/em>) survient fr\u00e9quemment dans les environnements de production s\u00e9curis\u00e9s. Si le compte de service sous lequel s&rsquo;ex\u00e9cute le d\u00e9mon SAS ne d\u00e9tient pas formellement les droits d&rsquo;\u00e9criture (droit POSIX <code>w<\/code>) sur le r\u00e9pertoire distant cibl\u00e9, la tentative d&rsquo;exportation est stopp\u00e9e net. Le protocole de d\u00e9bogage rigoureux impose de tester l&rsquo;accessibilit\u00e9 du r\u00e9pertoire \u00e0 l&rsquo;aide de la fonction syst\u00e8me interne <code>FILEXIST()<\/code> ou via l&rsquo;instruction d&rsquo;interrogation de variables logiques <code>%SYSFUNC(FILENAME(...))<\/code> avant de soumettre un traitement d&rsquo;exportation massif.<\/p>\n<h3>11.2 Correction des tronquages de cha\u00eenes et des d\u00e9salignements de colonnes<\/h3>\n<p>Le deuxi\u00e8me ordre de dysfonctionnements critiques concerne l&rsquo;alt\u00e9ration structurelle du contenu interne des fichiers d\u00e9limit\u00e9s g\u00e9n\u00e9r\u00e9s. Ces anomalies se manifestent typiquement sous deux formes : la troncature silencieuse des cha\u00eenes textuelles longues et le d\u00e9calage brutal des alignements de colonnes lors de la relecture externe.<\/p>\n<p>La troncature textuelle intervient principalement lorsque la variable caract\u00e8re source a \u00e9t\u00e9 d\u00e9finie avec une longueur insuffisante dans l&rsquo;\u00e9tape <code>DATA<\/code> parente ou lorsque le moteur d&rsquo;exportation pr\u00e9sume une longueur de tampon par d\u00e9faut trop \u00e9triqu\u00e9e (souvent 256 octets). Si une variable de commentaire clinique comporte 800 caract\u00e8res, toute la fraction exc\u00e9dant la longueur d\u00e9clar\u00e9e est irr\u00e9versiblement perdue lors de la s\u00e9rialisation, sans n\u00e9cessairement d\u00e9clencher d&rsquo;erreur bloquante dans le journal. Pour pallier ce risque, il convient de d\u00e9clarer explicitement des longueurs \u00e9tendues via l&rsquo;instruction <code>LENGTH<\/code> (par exemple <code>LENGTH variable_texte $2000;<\/code>) et de v\u00e9rifier attentivement le dimensionnement du param\u00e8tre <code>LRECL=<\/code> (<em>Logical Record Length<\/em>) pour garantir que la capacit\u00e9 d&rsquo;accueil de la ligne d&rsquo;exportation n&rsquo;est pas satur\u00e9e.<\/p>\n<p>Le d\u00e9calage de colonnes (<em>column shifting<\/em>) r\u00e9sulte quant \u00e0 lui presque exclusivement de la pr\u00e9sence pernicieuse de caract\u00e8res de contr\u00f4le textuels r\u00e9siduels enfouis au sein des donn\u00e9es : tabulations non d\u00e9clar\u00e9es, retours chariot (<code>r<\/code>) ou sauts de ligne (<code>n<\/code>) inject\u00e9s lors de la saisie manuelle de questionnaires d&rsquo;\u00e9valuation. Lorsqu&rsquo;un fichier CSV contient une observation avec un saut de ligne non encapsul\u00e9, le parseur r\u00e9cepteur pr\u00e9sume le d\u00e9marrage imm\u00e9diat d&rsquo;une nouvelle observation. Les donn\u00e9es se retrouvent alors d\u00e9salign\u00e9es, des valeurs textuelles se positionnant dans des colonnes de score num\u00e9rique, ruinant l&rsquo;analyse statistique subs\u00e9quente.<\/p>\n<p>Pour \u00e9liminer d\u00e9finitivement ce risque, une phase de nettoyage pr\u00e9ventif doit \u00eatre int\u00e9gr\u00e9e dans le pipeline en amont de l&rsquo;exportation. L&#8217;emploi de la fonction <code>COMPBL()<\/code> pour r\u00e9duire les espaces multiples ou de la fonction d&rsquo;expression r\u00e9guli\u00e8re <code>PRXCHANGE()<\/code> permet de purger syst\u00e9matiquement les caract\u00e8res non imprimables :<\/p>\n<p><code>DATA work.eval_purgee;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;SET work.eval_clinique;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;\/* \u00c9limination des retours \u00e0 la ligne internes (ASCII 10 et 13) *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;Diagnostic = COMPRESS(Diagnostic, '0A0D'x);<br \/>\nRUN;<\/code><\/p>\n<p>Cette \u00e9tape de rem\u00e9diation assure la rectitude g\u00e9om\u00e9trique parfaite du fichier d&rsquo;arriv\u00e9e, garantissant que chaque enregistrement physique corresponde rigoureusement \u00e0 une unique observation conceptuelle.<\/p>\n<h2>12. Automatisation et industrialisation : Utilisation des macros SAS pour exporter plusieurs tables en CSV<\/h2>\n<h3>12.1 Conception d&rsquo;une macro-commande param\u00e9tr\u00e9e pour exports it\u00e9ratifs<\/h3>\n<p>Dans un contexte d&rsquo;industrialisation des cha\u00eenes analytiques, la soumission manuelle d&rsquo;instructions r\u00e9p\u00e9titives <code>PROC EXPORT<\/code> pour chaque table d&rsquo;un projet de recherche repr\u00e9sente une r\u00e9gression m\u00e9thodologique majeure, source d&rsquo;erreurs humaines et d&rsquo;inconsistances de maintenance. L&rsquo;encapsulation de la logique d&rsquo;extraction au sein du puissant <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/support.sas.com\/documentation\/onlinedoc\/base\/macro.pdf\">Macro-Langage SAS<\/a> permet d&rsquo;\u00e9riger des modules d&rsquo;exportation r\u00e9utilisables, modulaires et robustes.<\/p>\n<p>La conception d&rsquo;une telle macro-commande repose sur le passage de param\u00e8tres dynamiques permettant de faire varier le jeu de donn\u00e9es d&rsquo;origine, le r\u00e9pertoire de stockage de sortie, le format du s\u00e9parateur et l&rsquo;application \u00e9ventuelle de sous-s\u00e9lections conditionnelles. Examinons la construction d&rsquo;un composant d&rsquo;infrastructure hautement r\u00e9silient :<\/p>\n<p><code>%MACRO ExporterVersCSV(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;TableSource = ,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;RepertoireSortie = ,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;Separateur = %STR(,),<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;Remplacer = YES<br \/>\n);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* Validation pr\u00e9ventive des param\u00e8tres d'entr\u00e9e *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%IF %SYSFUNC(EXIST(&amp;TableSource)) = 0 %THEN %DO;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%PUT %STR(ERR)%STR(OR): La table source \"&amp;TableSource\" est introuvable.;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%RETURN;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%END;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* Extraction dynamique du nom de fichier pur *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%LOCAL NomFichier;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%IF %INDEX(&amp;TableSource, .) &gt; 0 %THEN<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%LET NomFichier = %SCAN(&amp;TableSource, 2, .);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%ELSE<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%LET NomFichier = &amp;TableSource;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* D\u00e9clenchement conditionnel de l'exportation *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PROC EXPORT DATA=&amp;TableSource<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUTFILE=\"&amp;RepertoireSortie\/&amp;NomFichier..csv\"<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS=DLM<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%IF %UPCASE(&amp;Remplacer) = YES %THEN REPLACE;;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DELIMITER=\"&amp;Separateur\";<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUTNAMES=YES;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;RUN;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* V\u00e9rification formelle du code conditionnel syst\u00e8me *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%IF &amp;SYSCC &gt; 4 %THEN %DO;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%PUT %STR(WAR)%STR(NING): L'exportation de la table &amp;TableSource a g\u00e9n\u00e9r\u00e9 des anomalies critiques.;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%END;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%ELSE %DO;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%PUT %STR(NOTE): Exportation r\u00e9ussie de &amp;TableSource vers &amp;NomFichier..csv.;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;%END;<br \/>\n%MEND ExporterVersCSV;<\/code><\/p>\n<p>Cette macro-commande mat\u00e9rialise une d\u00e9marche de conception d\u00e9fensive : elle valide l&rsquo;existence de la table avant l&rsquo;appel \u00e0 la proc\u00e9dure via la fonction <code>%SYSFUNC(EXIST())<\/code>, isole le nom de la table sans son pr\u00e9fixe de biblioth\u00e8que pour forger un nom de fichier propre, contr\u00f4le l&rsquo;application de l&rsquo;option <code>REPLACE<\/code> et interroge la variable d&rsquo;erreur <code>&amp;SYSCC<\/code> pour notifier le syst\u00e8me de monitoring de la bonne ex\u00e9cution du livrable. L&rsquo;analyste peut ainsi soumettre des blocs d&rsquo;exportation en une ligne de code lisible et auditable.<\/p>\n<h3>12.2 Exportation par lot \u00e0 partir des m\u00e9tadonn\u00e9es du dictionnaire SAS (SASHELP.VTABLE)<\/h3>\n<p>L&rsquo;apog\u00e9e de l&rsquo;automatisation dans l&rsquo;environnement SAS r\u00e9side dans l&rsquo;extraction dynamique guid\u00e9e par les m\u00e9tadonn\u00e9es. Plut\u00f4t que de d\u00e9clarer manuellement chaque table \u00e0 exporter, les ing\u00e9nieurs peuvent interroger directement le dictionnaire interne du syst\u00e8me via la vue <code>SASHELP.VTABLE<\/code>. Cette table de m\u00e9tadonn\u00e9es recense l&rsquo;int\u00e9gralit\u00e9 des objets tabulaires instanci\u00e9s au sein de l&rsquo;ensemble des biblioth\u00e8ques actives au cours de la session courante.<\/p>\n<p>En combinant l&rsquo;interrogation de cette vue avec la puissante instruction de commande proc\u00e9durale <code>CALL EXECUTE<\/code>, il devient possible d&rsquo;instancier dynamiquement une cha\u00eene s\u00e9quentielle d&rsquo;exportations pour des dizaines de tables sans r\u00e9diger la moindre ligne de code r\u00e9p\u00e9titif. Consid\u00e9rons le cas d&rsquo;usage o\u00f9 l&rsquo;int\u00e9gralit\u00e9 des tables h\u00e9berg\u00e9es dans la biblioth\u00e8que d&rsquo;\u00e9tude <code>CLINIQUE<\/code> doit \u00eatre extraite sous forme de fichiers CSV individuels horodat\u00e9s pour archivage p\u00e9renne :<\/p>\n<p><code>DATA _NULL_;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;SET sashelp.vtable (WHERE=(libname = 'CLINIQUE'));<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* G\u00e9n\u00e9ration dynamique d'une estampille temporelle *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;LENGTH Horodatage <span class=\"arabpsy-math-inline\" data-latex=\"10 Commande\">$10 Commande$<\/span>1000 CheminFichier $500;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;Horodatage = PUT(TODAY(), YYMMDDN8.);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* Construction du chemin d'acc\u00e8s absolu unique *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;CheminFichier = CATS('\/archives\/csv\/clinique_', memname, '_', Horodatage, '.csv');<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* Assemblage de la cha\u00eene de syntaxe PROC EXPORT *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;Commande = CATS(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'PROC EXPORT DATA=', libname, '.', memname, ' ',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'OUTFILE=\"', CheminFichier, '\" ',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'DBMS=CSV REPLACE; ',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'PUTNAMES=YES; ',<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'RUN;'<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/* Transmission de l'instruction au tampon d'ex\u00e9cution du superviseur *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;CALL EXECUTE(Commande);<br \/>\nRUN;<\/code><\/p>\n<p>Le fonctionnement interne de ce script refl\u00e8te toute la puissance de l&rsquo;architecture m\u00e9ta-programmatique de SAS. L&rsquo;\u00e9tape <code>DATA _NULL_<\/code> s&rsquo;it\u00e8re sur chaque enregistrement de <code>SASHELP.VTABLE<\/code> correspondant au crit\u00e8re <code>libname = 'CLINIQUE'<\/code>. Pour chaque table identifi\u00e9e, elle assemble dynamiquement une cha\u00eene de caract\u00e8res contenant une instruction <code>PROC EXPORT<\/code> compl\u00e8te, int\u00e9grant le nom de la table (<code>memname<\/code>) et un horodatage syst\u00e9matique au format <code>YYYYMMDD<\/code>. L&rsquo;instruction <code>CALL EXECUTE<\/code> pousse ensuite cette cha\u00eene directement dans le tampon de commande global de SAS, qui l&rsquo;ex\u00e9cute s\u00e9quentiellement d\u00e8s la cl\u00f4ture de l&rsquo;\u00e9tape <code>DATA<\/code>.<\/p>\n<p>Cette approche \u00e9limine tout risque d&rsquo;omission lors de l&rsquo;archivage de bases multi-tables complexes. Chaque table d\u00e9riv\u00e9e, table d&rsquo;audit ou registre d&rsquo;\u00e9v\u00e9nements ind\u00e9sirables se voit automatiquement projet\u00e9 sur le syst\u00e8me de stockage p\u00e9renne sous une d\u00e9nomination normalis\u00e9e et tra\u00e7able. L&rsquo;int\u00e9gration de tels pipelines d&rsquo;exportation automatis\u00e9e garantit aux organisations de recherche une int\u00e9grit\u00e9 m\u00e9thodologique absolue, r\u00e9duisant la charge de travail manuel et assurant une parfaite transition des connaissances tout au long du cycle de vie des donn\u00e9es.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>Delwiche, L. D., &amp; Slaughter, S. J. (2019). <em>The Little SAS Book: A Primer, Sixth Edition<\/em>. SAS Institute Inc. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/support.sas.com\/en\/books\/little-sas-book.html\">https:\/\/support.sas.com\/en\/books\/little-sas-book.html<\/a><\/li>\n<li>Peng, R. D. (2015). <em>Report writing for data science in R<\/em>. Leanpub. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/leanpub.com\/reportwriting\">https:\/\/leanpub.com\/reportwriting<\/a><\/li>\n<li>SAS Institute Inc. (2020). <em>SAS\u00ae 9.4 Statements: Reference, Fifth Edition<\/em>. SAS Institute Inc. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/documentation.sas.com\/doc\/en\/pgmsascdc\/9.4_3.5\/lestmtsref\/titlepage.htm\">https:\/\/documentation.sas.com\/doc\/en\/pgmsascdc\/9.4_3.5\/lestmtsref\/titlepage.htm<\/a><\/li>\n<li>SAS Institute Inc. (2021). <em>Base SAS\u00ae Procedures Guide, Version 9.4<\/em>. SAS Institute Inc. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/documentation.sas.com\/doc\/en\/pgmsascdc\/9.4_3.5\/proc\/titlepage.htm\">https:\/\/documentation.sas.com\/doc\/en\/pgmsascdc\/9.4_3.5\/proc\/titlepage.htm<\/a><\/li>\n<li>Shafer, Y. (2017). <em>PROC EXPORT and the DATA Step: The Dynamic Duo for Creating CSV Files<\/em>. Proceedings of the SAS Global Forum 2017 Conference. SAS Institute Inc. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/www.sas.com\/content\/dam\/SAS\/support\/en\/sas-global-forum-proceedings\/2017\/0402-2017.pdf\">https:\/\/www.sas.com\/content\/dam\/SAS\/support\/en\/sas-global-forum-proceedings\/2017\/0402-2017.pdf<\/a><\/li>\n<li>Wickham, H., &amp; Grolemund, G. (2017). <em>R for Data Science: Import, Tidy, Transform, Visualize, and Model Data<\/em>. O&rsquo;Reilly Media. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/r4ds.had.co.nz\/\">https:\/\/r4ds.had.co.nz\/<\/a><\/li>\n<li>Wilkinson, M. D., Dumontier, M., Aalbersberg, I. J., Appleton, G., Axton, M., Baak, A., &#8230; &amp; Mons, B. (2016). The FAIR Guiding Principles for scientific data management and stewardship. <em>Scientific Data<\/em>, 3(1), 1-9. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/sdata.2016.18\">https:\/\/doi.org\/10.1038\/sdata.2016.18<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour exporter vos jeux de donn\u00e9es SAS au format CSV via PROC EXPORT et DATA step, illustr\u00e9 par des exemples pratiques d\u00e9taill\u00e9s.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[1829,9499],"tags":[2682,4701,6577,10207,235],"class_list":["post-9296","psych_stat","type-psych_stat","status-publish","hentry","category-methodologie-statistique","category-programmation-sas","tag-analyse-statistique","tag-csv","tag-exportation-de-donnees","tag-proc-export","tag-sas"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/9296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9296"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/9296\/revisions"}],"predecessor-version":[{"id":9300,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/9296\/revisions\/9300"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}