SAS vers Python : ce que cela demande vraiment

La plupart des résultats de cette recherche sont des outils qui produisent du Python à partir de source SAS, et plusieurs le font bien. Cette page commence une étape plus tôt : le déplacement est-il justifié pour votre base de code, que coûte la vérification du résultat, et que faire lorsque la réponse est non.

La réponse courte

Il existe quatre voies pour sortir d'une base de code SAS, pas deux : la confier à un outil automatique, la réécrire à la main, exécuter les programmes SAS tels quels sur autre chose que SAS, ou n'y toucher à rien. Le choix dépend presque entièrement de deux questions — la quantité de code, et l'obligation ou non de reproduire les résultats produits auparavant. Tout ce qui suit est le coût de chaque voie.

Quand Python est la bonne réponse

Python est la meilleure destination plus souvent qu'une page comme celle-ci ne l'admet d'ordinaire. Quatre conditions rendent le choix évident : la base de code est assez petite pour qu'une personne la lise en une semaine, l'équipe écrit déjà du Python au quotidien, l'analyse doit de toute façon être refaite, et rien en aval n'exige que les nouveaux chiffres correspondent exactement aux anciens. Lorsque ces quatre conditions tiennent, une réécriture coûte moins cher que n'importe quelle couche de compatibilité, et il en sort du code que votre équipe peut maintenir sans entretenir un second langage.

Quatre voies, et ce que chacune coûte

Chaque option ci-dessous est la bonne réponse pour quelqu'un. Aucune n'est sans coût, et la partie coûteuse n'est jamais la syntaxe.

Un convertisseur automatique

Outils en ligne, services d'éditeurs et grands modèles de langage prennent de la source .sas et renvoient du Python, en projetant généralement les étapes DATA sur pandas et les procédures courantes sur statsmodels ou scikit-learn. Pour quelques centaines de lignes de manipulation de données simple, c'est un vrai raccourci, et vous obtenez un point de départ lisible en quelques minutes. La facture arrive plus tard : chaque ligne du résultat doit être relue par quelqu'un qui connaît les deux langages.

Une réécriture à la main

Quelqu'un lit le programme SAS, comprend ce qu'il devait faire, et l'écrit en Python. C'est plus lent à démarrer et c'est la seule voie qui aboutit à du code qui ressemble à du Python plutôt qu'à du SAS déguisé. Les équipes encore satisfaites de Python deux ans plus tard y sont presque toutes arrivées ainsi, en gardant généralement l'ancien programme en service jusqu'à ce que les chiffres concordent.

Exécuter les programmes tels quels — 100 procédures

La voie que les comparatifs passent sous silence. Jenner est une implémentation en salle blanche du langage SAS 9.4 écrite en Rust : elle lit directement les fichiers SAS7BDAT et exécute la source .sas telle quelle, il n'y a donc aucun code généré à relire ni second langage à entretenir. Ce qu'elle ne fait pas, c'est couvrir tout le langage SAS, et la couverture est publiée procédure par procédure pour que vous puissiez vérifier la vôtre avant d'en dépendre.

Rester où vous êtes

Ne rien faire est une décision réelle et souvent la bonne. Si le code est stable, si l'environnement qui l'exécute ne disparaît pas cette année et si personne ne réclame de changement, la migration que vous ne faites pas offre le meilleur rendement de cette page. Revenez-y quand un changement de plateforme, un audit ou une difficulté de recrutement imposera la question.

Ce que coûte la confiance dans du code converti

Le mode de défaillance d'une conversion automatique n'est pas l'erreur de syntaxe ; celle-ci apparaît dès la première exécution. C'est l'écart numérique silencieux. SAS complète les valeurs caractère par des blancs à droite, Python non ; SAS compte les dates à partir du 1 janvier 1960 tandis que pandas part du 1 janvier 1970 ; et un MERGE d'étape DATA ne se comporte pas comme un merge pandas quand la clé se répète des deux côtés. Rien de tout cela ne déclenche quoi que ce soit. Cela produit un nombre presque juste, ce qui est la pire sorte de faux. Le vrai prix d'une conversion est donc une relecture ligne à ligne par quelqu'un qui maîtrise les deux langages, plus une période où l'ancien et le nouveau tournent côte à côte sur les mêmes données jusqu'à ce que les sorties concordent — et ce prix dépend de la quantité de code, pas de son ingéniosité.

Questions fréquentes

Oui, et les outils sont meilleurs qu'avant. Des convertisseurs web et des services d'éditeurs prennent un fichier .sas et renvoient du Python, et un grand modèle de langage (LLM) fera la même chose depuis une fenêtre de chat. Tous sont bons en syntaxe, et aucun ne peut vous dire si les chiffres correspondent toujours. Traitez le résultat comme un premier jet écrit par quelqu'un qui n'a jamais vu vos données.

Non. Elle est publiée par Jenner, une implémentation indépendante, en salle blanche, du langage SAS 9.4 écrite en Rust. Elle exécute les programmes .sas tels qu'ils sont écrits, sur les fichiers SAS7BDAT que vous possédez déjà. Rien n'est produit dans un autre langage, il n'y a donc aucune source générée à relire.

En général un fichier Python par programme SAS : les étapes DATA rendues comme opérations pandas, PROC SQL soit comme jointures pandas, soit comme SQL via un pilote de base de données, et les procédures statistiques projetées sur statsmodels, scipy ou scikit-learn lorsqu'un équivalent existe. Là où aucun équivalent n'existe — une bonne part du macro-langage, la sortie ODS, beaucoup de formats et d'informats — l'outil laisse un commentaire ou sa meilleure supposition. C'est dans cet écart que part le temps de relecture.

Il en existe de bonnes, et elles partagent toutes une limite qu'il vaut mieux connaître avant de s'y fier. Une fiche fait correspondre PROC MEANS à un describe de pandas, PROC FREQ à value_counts ou à un tableau croisé, PROC SORT à sort_values, et une étape DATA à une suite d'affectations. C'est la couche syntaxique, et la syntaxe n'est pas la partie difficile. Ce qu'aucun tableau ne peut traduire, c'est la sémantique en dessous — traitement des valeurs manquantes, traitement par groupes BY, blancs à droite dans les comparaisons de caractères, origine des dates — et c'est là que le code converti se trompe en silence.

Oui, et pour un programme court c'est souvent le chemin le plus court vers un premier jet. Le piège est celui de tous les convertisseurs, aggravé par l'aisance : un LLM écrit du code qui se lit de façon convaincante, qu'il soit juste ou non, et il inventera un équivalent plausible pour une option de procédure qu'il ne connaît pas. Le remède n'est pas un meilleur prompt. C'est de donner au modèle le moyen d'exécuter les deux versions et de comparer les sorties, pour que la vérification soit mécanique et non une question de ton assuré.

Personne ne peut vous le dire de l'extérieur, et une page qui vous annonce un chiffre devine. Les deux variables qui comptent sont le nombre de lignes et la force de l'exigence que les nouvelles sorties correspondent aux anciennes. Quelques milliers de lignes sans obligation de reproduction, c'est un projet qu'une petite équipe termine ; une base validée dont les résultats antérieurs doivent être reproductibles, c'est un programme avec un budget de tests, et l'écriture du code en est la petite part.

Quand la sortie doit reproduire ce que produisaient les anciens programmes et que quelqu'un d'extérieur à l'équipe le vérifiera. Quand la base est assez grande pour que personne ne l'ait lue en entier. Quand les personnes qui comprennent l'analyse ne sont pas celles qui écrivent du Python. Chacun de ces cas transforme un travail de codage en travail de validation, et c'est la validation qui fait déraper ces projets.

Exécuter les programmes SAS sans SAS. Une implémentation indépendante du langage SAS exécute la source .sas que vous avez déjà, ce qui signifie aucun code généré à relire et aucune seconde langue dans la pièce. Jenner en fait partie. Altair SLC, anciennement WPS, en est une autre et le fait depuis bien plus longtemps. Cette voie mérite d'être chiffrée chaque fois que la raison du départ est la plateforme ou la licence, et non le langage lui-même.

Oui. Les fichiers SAS7BDAT sont lus directement, donc rien n'a besoin d'être exporté en CSV au préalable. Cela compte plus qu'il n'y paraît. Une migration qui commence par déverser chaque jeu de données en texte hérite d'un second ensemble de différences — encodages, précision numérique, analyse des dates — empilé sur celles du code, et plus personne ne sait de quelle couche vient un écart.

Pas tout le langage SAS, et c'est la limite honnête à mettre en balance avec tout ce qui précède. Chaque procédure implémentée dispose d'une page de référence publiée : savoir si une PROC précise est prise en charge se vérifie donc avant d'en dépendre plutôt qu'après. Les programmes qui s'appuient sur des options de procédure rares, des mises en page ODS ou des moteurs de bases de données externes sont les premiers endroits à regarder. Le test pratique consiste à exécuter vos propres programmes et à comparer les journaux ; cela prend un après-midi et tranche la question mieux que n'importe quelle affirmation sur une page comme celle-ci.

Altair SLC, anciennement WPS, exécute des programmes en langage SAS sans SAS, et depuis bien plus longtemps que nous. Sur un grand parc, là où quelqu'un d'autre a déjà rencontré votre cas limite et l'a fait corriger, cette histoire vaut de l'argent. Mettez les deux face à votre propre code et comparez les journaux. La réponse est généralement évidente en une journée, et ce n'est pas toujours nous.

C'est la fin la plus fréquente, et elle est raisonnable. Les nouvelles analyses s'écrivent en Python parce que c'est là que sont déjà l'équipe et les bibliothèques, tandis que les anciens programmes validés continuent de tourner tels quels jusqu'à ce qu'il y ait une raison d'y toucher. Cela évite la pire version de cette décision : une réécriture d'un seul coup d'un code que personne n'a le budget de revalider. Les deux côtés n'ont à s'accorder qu'à la frontière — les données qu'ils se passent — et non ligne à ligne.

Tranchez sur vos propres programmes

Votre code, vos données, et les journaux côte à côte. C'est la comparaison qui décide, et c'est celle que personne ne peut mener à votre place.

Démarrer l'essai gratuit