logo

SAS/Base

SAS/BASE : Sélection des premières lettres de chaque mot d’une chaîne de caractères

Bonjour, A partir d’une variable texte, j’ai besoin d’extraire les premières lettres de chaque mot de la chaine de caractères. Exemples : à partir de variable1 Il fait beau Toto fait ses devoirs je souhaite obtenir variable2 IFB TFSD Existe-t-il une fonction SAS permettant de faire cette sélection ? Si non, avez-vous une idée du codage et des fonctions à utiliser pour obtenir le résultat attendu ? Merci d’avance.   Bonjour. Il n’y a pas de fonction automatique dans SAS, […]

SAS/BASE : proc DELETE ?

J’ai découvert une « proc delete » dans quelques programmes. N’ayant jamais vu cette procédure auparavant, je me suis empressé de regarder dans ma doc. Procédure inconnue. Aucune référence. J’ai été voir chez SAS/France, (cf. http://support.sas.com/documentation/cdl/en/allprodsproc/61917/HTML/default/a003135046.htm) : même résultat. Et pourtant elle marche, je l’ai testée moi aussi. Elle semble ne pas faire grand chose de plus que supprimer des tables ; mais j’aimerais en savoir plus.   Bonjour. Cette procédure est en fait dérivée de la proc DATASETS qui contient une […]

SAS/BASE : suppression d’espaces

Je voudrais supprimer des blancs à droite et à gauche de caractères en veillant à ne pas le faire dans la chaine de caractères afin de les concaténer. Ex :  » Dupont  »  » Jean Paul «    En version 8, il faut utiliser deux fonctions : LEFT et TRIM (la 1e supprime les blancs de gauche, la 2nde ceux de droite). En SAS v9, il y a une fonction STRIP qui fait les 2 d’un coup.

SAS/BASE : espace et concaténation

Bonjour. Je souhaite concaténer le nom et prénom d’un individu en supprimant à droite les blancs. Comment faire?   Vous pouvez utiliser la fonction TRIM qui supprime les blancs à droite : Nom_complet = TRIM(prenom)!!" "!!TRIM(nom) ; Ou, en SAS v9, utiliser la fonction STRIP (suppression des blancs à gauche et à droite), ou encore les fonctions CATT (concaténation et suppression des blancs à droite) ou CATX (concaténation, élimination des blancs à gauche et à droite, insertion d’un caractère séparateur) […]

SAS/BASE : Fonction SAS Ascii

Existe-t-il une fonction SAS permettant de donner le code ascii d’un caractère ? Merci pour votre reponse   Bonjour. Il s’agit de la fonction RANK, appliquée à une variable texte. La fonction BYTE fait l’opération inverse (renvoie un texte à partir du code Ascii). Attention, si la fonction RANK est exécutée sur MVS, elle renvoie le code EBCDIC.

SAS/BASE : Identifier des doublons

Bonjour, j’aimerais savoir comment faire pour comparer des observations au seins d’une même variable. Par exemple, j’ai une variable nom et une variable adresse au sein d’une même table. J’aimerais regarder au seins de ma table s’il existe des observations qui ont les memes valeurs pour les 2 variables. Si c’est le cas, je veux attribuer un numéro identique à ces observations. Merci d’avance pour votre aide.   Vous pouvez, après un tri de votre table, utiliser une étape Data […]

SAS/AF : Envoi d’un email à partir d’un carnet d’adresse Outlook

Bonjour Je suis en train de réaliser une appli sas/af et je souhaite savoir s’il est possible d’envoyer un mail à un destinataire dont l’e-mail se trouve dans un carnet d’adresses Outlook. Merci   Voici un petit programme qui peut être lancé depuis une appli AF sans problème, c’est du SAS de base tout bête. On peut utiliser au choix l’adresse complète du destinataire (genre contact@od-datamining.com) ou son alias (Olivier Decourt) mais uniquement s’il n’y a pas d’équivoque possible (pas […]

Macro : faire un SET avec un nombre de tables variable

J’ai un nombre de tables (de 1 à 40 ou 50, il faut que soit un paramètre) et avec un SET j’en crée une seule. Comment écrire ça sans répéter 40 ou 100 fois le noms des tables dans le SET. <strong>data ww.CMb;</strong> <strong> set </strong> <strong> ww.CM1b</strong> <strong> ww.CM2b</strong> <strong> …</strong> <strong> ww.CM40b;</strong> <strong>run;</strong> Merci Bonjour, et merci de votre question. Vous pouvez utiliser un programme comme celui-ci : %MACRO empilement (nbTables) ;   DATA ww.CMb ;      SET        […]

SAS/BASE : nombre de variables généré par une proc TRANSPOSE

La procédure suivante <strong>proc transpose data=infic</strong> <strong> prefix=cnt</strong> <strong> out=outfic;</strong> <strong> var nocnt;</strong> <strong> by client; </strong> <strong>run ;</strong> va générer cnt1 à cntn. Comment récupérer le nombre de variables générées (n) dans une étape data ? Merci.   Pour mettre ce nombre dans une macro-variable, voici un premier programme : DATA _NULL_ ;    SET outfic ;    ARRAY transpose cnt: ;    CALL SYMPUT ("nbNllesVar", DIM(transpose)) ;    STOP ; RUN ; Vous récupérez le nombre de variables créées par la procédure […]

Macro : Utilisation des instructions cards et datalines dans un macro programme

Je souhaite générer des tables automatiquement avec un programme sas, mais impossible d’utiliser les fonctions cards et datalines ! Quelle est l’origine du problème et existe-t-il une astuce pour y remédier ? Merci d’avance. exemple de script : <b> %macro essai; data table; input variable; cards; 1 2 3 ; run; %mend essai; %essai; ERROR: The macro ESSAI generated CARDS (data lines) for the DATA step, which could cause incorrect results. The DATA step and the macro will stop executing. […]

Importation : rapatrier des données Business Object sous SAS

Bonjour, Je souhaiterai exploiter des données de BO sous SAS. Pour cela, je sauve mon .rep en .txt. Le séparateur est une tabulation. Est-il possible d’utiliser l’option « delimiter » avec ce type de séparateur ? Si oui, comment ?! Merci d’avance !   Dans l’instruction INFILE de l’étape Data, il faut préciser DELIMITER = « 09 »x qui représente une tabulation. Dans l’assistant d’import par fenêtres, il faut choisir DELIMITED FILE (*.*) comme type de fichier, puis dans l’écran suivant, après avoir indiqué […]

Performance : Gestion des index – compression

Bonjour, J’utilise de très grosses tables (plusieurs millions de lignes; entre 10 et 50 variables) que j’ai créées à partir de fichiers texte. Pour les variables caractères, c’est le nombre que j’ai précisé après $ qui a été pris en compte. Pour les champs numériques c’est Best12, quelle que soit la longueur que j’avais spécifiée. J’ai crée des index sur mes tables. Les temps d’accès sont relativement longs je trouve. Je pensais compresser mes tables. Comment m’assurer que mes tables […]

Formats : Format à partir d’une table

Bonjour, Je fais un format à partir d’une table sas, jusque-là pas de problème. Mon souci est lorsque j’applique ce format, pour les valeurs qu’il ne trouve pas il n’applique aucun format. Je voudrais ajouter dans mon format une ligne pour les « other » valeurs. Voilà mon pgm : <b>data format.fmtDRCourt; set tdbprod.BaseCourtiers (keep=gc DR rename=(gc=start dr=label)); by start; type="N"; /* N Numérique */ fmtname="DRCOURT"; run; proc format lib=format cntlin = format.fmtDRCourt /*fmtlib*/; run;</b>   Je vous propose la variante suivante. […]

Formats : créer un format pour une variable de format date

Bonjour, j’ai une variable date dans un fichier, et je souhaite faire la répartition en fonction de tranche gérées par un format que je crée… et je n’arrive pas à créer ce format (sans passer par le calcul du nombre de jours correspondants à ma date..) j’ai essayé ça : <b>proc format; value anccrea    low- mdy(12,31,2002) = "1- avant 01/2003"    mdy(12,31,2002)-mdy(12,31,2004)= "2- entre 2003 et 2004 "    mdy(12,31,2004)-high= "3- depuis 2005 "    other ="???"; run; </b> et ça <b>proc format; […]

Format : Créer un label avec une apostrophe

Bonjour, Je souhaiterais créer un label pour une variable contenant une apostrophe. Mais, SAS prend cette apostrophe comme la fin du label : <strong>proc format;</strong> <strong> value $test</strong> <strong> '10' = 'l'arbre';</strong> <strong> run;</strong> Comment faire comprendre à SAS qu’il ne s’agit pas de la fin du label ? Merci Bonjour. Le plus simple pour résoudre votre problème est tout simplement d’écrire votre libellé entre guillemets doubles. Il n’y aura alors pas de confusion avec les apostrophes. Dans SAS, les […]

ODS : Procédure Tabulate, éliminations de lignes et colonnes inutiles ?

Bonjour, j’aurais voulu savoir comment manipuler les cellules de la sortie afin d’enlever les cellules (ou lignes) dont je n’ai pas besoin.   Bonjour. Les seuls moyens de masquer des lignes (ou des colonnes) entières de la procédure Tabulate sont : de filtrer les données en amont avec un WHERE d’utiliser un format pour associer les valeurs des valeurs des variables CLASS à ne pas afficher avec des valeurs manquantes (par défaut, la procédure Tabulate n’affiche pas les valeurs manquantes) […]

Formats : Remplacer les points par les virgules

Bonjour, J’ai généré 1 fichier pdf avec des proc tabulate. Comment faire pour remplacer les points par des virgules dans ma sortie? Merci.   Bonjour. PROC TABULATE DATA = … FORMAT = NUMX12.2 ; devrait faire l’affaire.

Formats : format français

Bonjour, Je voudrais obtenir mes résultats avec un format français, notamment pour remplacer tous les points par des virgules. Il me semble qu’il faut utiliser la fonction LOCALE= , mais je ne trouve pas la syntaxe exacte, ni où il faut la placer exactement dans un programme.   Bonjour. Pour obtenir des affichages « européens » avec une virgule en guise de séparateur décimal, on peut d’abord utiliser le format NUMXc.d avec, comme d’habitude dans un format, c le nombre total de […]

Formats : format pour comparer un groupe à l’ensemble de la population

Bonjour, Dans le cadre d’un travail sur le marché du logement, je souhaiterais comparer le comportement des moins de 35 ans au comportement de l’ensemble de la population. Pour cela, j’ai pensé à un format multilabel du type: <strong>   proc format;</strong> <strong>       value pop (multilabel) low-35="35 ans et moins"</strong> <strong>       low-high/* ?? */="tout le monde";</strong> <strong>   run;</strong> mais si j’applique ce format dans une proc freq par exemple: <strong>   proc freq data=****;</strong> <strong>       table age;</strong> <strong>       format age pop.;</strong> <strong> […]

Formats : Affichage des nombres avec un séparateur de milliers

Existe -t-il un format SAS numérique qui ajoute un séparateur de milliers ? par exemple : 1350 devient 1 350   Oui, à partir de SAS 9 il y a le format NLNUM. Vous pouvez aussi le créer facilement avec ce petit programme : PROC FORMAT ;    PICTURE milliers (ROUND)       0 – HIGH = "000 000 009"    ; RUN ; Vous utilisez ensuite le format milliers. quand vous en avez besoin. Pour plus d’informations sur les formats « picture », voir Les […]

Exportation : Insertion lignes dans Excel

Bonjour, je crée un classeur EXCEL avec plusieurs onglets en utilisant « tagsets.excelXP ». Je souhaiterais que dans chaque onglet, la 1ère ligne contienne un titre qui précise le contenu de l’onglet. Sauriez-vous comment obtenir ce type de résultat. Merci d’avance PS. L’instruction « title » colle le titre en entête de page pour l’impression, mais pas dans les lignes du classeur.   Bonjour. Il existe deux autres options pour répondre à votre besoin : pour que les titres des instructions TITLE apparaissent en […]

ODS : Titres très longs dans ODS RTF

Bonjour, je fais un tableau avec une PROC REPORT dans un fichier RTF. Je voudrais que mes titres de colonnes soient écrits verticalement et non horizontalement (il sont très longs). J’ai vu qu’on arrivait à ce résultat dans une sortie HTML en ajoutant style(header)={htmlstyle= »mso-rotate:90″} Mais ça ne marche pas sur une sortie RTF. Auriez-vous une idée sur la manière d’obtenir ce résultat ? Merci d’avance. Bonjour. Si vous voulez éviter d’avoir sur une ligne des titres trop longs, vous pouvez […]

Exportation : centrer les données d’un tableau Excel en SAS

Bonjour, j’ai réussi à générer un fichier Excel en SAS mais je n’arrive pas à le mettre en forme grâce à des feuilles de style. En effet je souhaiterai que les données de mon tableau Excel apparaissent centrées et non alignées à gauche comme le fait Excel par défaut. Si on génére un fichier HTML, les données arrivent parfaitement à être centrées. Or, sur Excel cela ne marche pas !!! Voici mon code : <strong>proc template; </strong> <strong>   define style […]

Exportation : résultats SAS directement dans Excel

Bonjour, J’ai de nombreuses sorties sas que je souhaite produire dans des fichiers Excel. De la même manière que l’instruction « ods rtf » permet de générer des sorties lisibles par Word, existe-t-il un moyen de les rendre lisible par Excel ? Merci de votre réponse.   Bonjour. Pour écrire des résultats SAS dans Excel, vous avez deux solutions : pour toutes versions de SAS depuis la 8.0, vous pouvez ouvrir une destination ODS HTML sur le même principe qu’ODS […]

Exportation : Liaison DDE SAS/Excel

Je cherche à exporter 78 variables d’une table SAS vers un fichier Excel à l’aide d’une liaison DDE. Les observations sont des nombres décimaux possédant 11 caractères dont 10 décimales (par exemple 0.6612903226). Le programme SAS (ci-dessous) lui indique bien d’exporter 78 variables sur un espace de 78 cellules. <strong>filename sortie DDE "excel|Feuil1!l1c2:l1c79" notab; DATA _null_; SET pgm; FILE sortie; PUT COL1 '09'x COL2 '09'x COL3 '09'x COL4 '09'x COL5 '09'x COL6 '09'x COL7 '09'x COL8 '09'x COL9 '09'x COL10 […]

Exportation : export sous Excel

Bonjour, Pouvez-vous me dire s’il existe une macro ou procédure qui exporte une table en fichier excel (97) directement? Merci d’avance pour votre précieuse réponse. Bonjour. Si vous possédez SAS version 8 ou 9, c’est très simple : ODS HTML FILE = "chemin et nom de votre fichier.xls" ; TITLE ; FOOTNOTE ; PROC PRINT DATA = votre_table LABEL NOOBS ; RUN ; ODS HTML CLOSE ; Vous obtiendrez ainsi une pseudo feuille Excel (en fait, c’est une page Web […]

Exportation : Sorties SAS dans Excel

J’essaye d’ouvrir dans Excel un tableau généré par SAS dans une page Web (ODS HTML). Les cases de mon tableau sont comprises par Excel comme des chaînes de caractères ! Comme corriger ce problème ?   Par ailleurs, concernant l’envoi des tableaux HTML sous Excel, votre problème tient à un paramètre gênant : votre Excel est en Français, avec des virgules comme séparateur décimal. Or SAS, logiciel américain, utilise le point. Donc les points présents dans les cases des tableaux […]

Dates : fonction week non reconnue

J’essaye d’utiliser la fonction week dans mon programme, pour convertir une date en découpage hebdo.
Il semble que cette fonction ne soit pas reconnue. Je suis actuellement en SAS V8, est-ce que cette fonction n’est dispo qu’en V9 ?
Je vous remercie pour vos réponses.

Dates : Ne pas afficher le format dans une proc freq

je voudrais savoir comment les afficher via une proc freq sans format, c’est-à-dire en les visualisant sous la forme du nombre de jour depuis le 1er JAN 1960. L’objectif étant de récupérer les dates distinctes de ma table dans une liste, et de boucler dessus.
Par avance, merci.

Dates : format de date

J’ai une date de format $10. (style 10/10/2010) que je voudrais transformer en date DDMMYY10.
Merci d’avance de votre réponse.

Dates : créer un format pour une variable de format date

j’ai une variable date dans un fichier, et je souhaite faire la répartition en fonction de tranche gérées par un format que je crée… et je n’arrive pas à créer ce format (sans passer par le calcul du nombre de jours correspondants à ma date..)

Dates : Affichage de date

J’aurais souhaité afficher une date sous la forme suivante : Janvier 2005 (en français, mais sans le numéro du jour).

D’avance merci.

Dates : Repositionner les observations d’une table

Comment positionner des lignes concernant le même identifiant les unes à la suite des autres ?

Dates : problème avec des dates

Dans une table SAS que j’ai récupérée, j’ai une variable qui contient manifestement une date, qui semble numérique sur une longueur de 8, mais elle a un aspect bizarre. Une valeur, par exemple, est : 14JUN1977:00:00:00. Les fonctions dates habituelles (YEAR, INTNX, etc.) me renvoient des résultats aberrants quand je les applique à cette variable. Que faire ?

Client/serveur : Lancement d’un programme SAS en batch sous Unix

J’ai enregistré l’ensemble des commandes de mon batch dans un fichier txt. Quelles sont ensuite les commandes de lancement?
D’avance merci

Client/serveur : proc export

je travaille sur serveur et souhaiterais enregistrer mes tables sur le serveur sous un autre format que le format SAS (pour importation sous BO designer par la suite).
Merci d’avance.

Client/serveur : Allouer une librairie pointant sur un répertoire situé sur un autre serveur

Je souhaite allouer une librairie qui pointerait sur des données situées sur un serveur UNIX qui n’est pas celui sur lequel est installé le SAS que j’utilise.Cependant, si cela est utile, le logiciel SAS est installé sur les 2 serveurs. Y-a-t-il une (ou plusieurs ??) solutions ?

Client/serveur : Import de données

des variables qui étaient dans ma base de départ de type char deviennent de type num… j’ai voulu les modifier dans un noeud IDS mais ça ne fonctionne pas… Y a t-il un autre moyen?

Client/serveur : SAS ne trouve pas mes formats !

Je travaille en client/serveur. Je crée en RSUBMIT des formats avec une PROC FORMAT. Je fais une option FMTSEARCH sur la librairie qui contient le catalogue de formats. Pour l’exécution de procédures, tout va bien. Mais quand je veux regarder ma table avec l’Explorer, SAS me dit qu’il ne trouve pas les formats. Que se passe-t-il ?

Arbre de décision : Programme SAS

Bonjour, je suis en stage et je voudrais réaliser un arbre de décision sous SAS. Je voudrais connaître la forme du programme permettant de construire un arbre de décision sous SAS. Merci d’avance