2017-03-16 4 views
1

J'ai reçu un ensemble de données et un catalogue de format dans SAS, et j'essaie de le faire ouvrir, mais de toute façon je n'applique pas correctement le catalogue de format. Voici le code que j'ai utilisé. J'ai fait des recherches sur des sites SAS et j'ai pensé que j'avais les bonnes étapes pour appeler le catalogue, mais ça ne fonctionnait pas. Je suis sûr que c'est une erreur fondamentale que je commets.Utilisation d'un catalogue au format SAS

libname in 'U:/'; 
libname library 'U:/'; 

Options fmtsearch = (library.formats_raw); 

data ae; 
set in.ae; 
format 
    aeactae $AEMGMT. 
    AEACTSM $ACTION. 
    AEDVIS $VISIT. 
    AEENDT DATE11. 
    AEINT $AEINT. 
    AEIRLOC $INJSITE. 
    AEIRMEAS $YESNO. 
    AEIRTERM $ISR. 
    AEIRVIS $VISIT. 
    AEIRYN $YESNO. 
    AEOUT $OUTCOME. 
    aerel $aerel. 
    AESER $YESNO. 
    AESTDT DATE11. 
    AEYN $YESNO. 
    EVTDT DATE11. 
    LASTUPD EURDFDT20.; 
run; 

Pour chaque variable, je reçois l'erreur suivante dans le journal:

format 
      aeactae $AEMGMT. 
        --------    
ERROR 48-59: The format $AEMGMT was not found or could not be loaded. 
+0

Quel est le nom de fichier précis pour le catalogue de format? – Joe

+0

U:/formats_raw.sas7bdat – Bosley

+0

Ah, alors vous n'avez pas de catalogue de format! – Joe

Répondre

0

Edit: Étant donné les nouvelles informations les changements de réponse. Je laisse le reste au cas où c'est utile.

Vous avez un jeu de données de format, pas un catalogue de format. Vous devez exécuter ceci:

proc format cntlin=in.formats_raw; 
quit; 

pour importer les formats. Cela suppose qu'il a été créé correctement - il devrait avoir, au moins, fmtname, start, label, et probablement d'autres variables aussi (type, hlo, end sont communs).

Cette importation importe les formats enregistrés dans un jeu de données SAS vers l'environnement de travail. Si vous souhaitez créer un catalogue permanent, vous devez spécifier lib=in ou l'endroit où vous voulez les stocker sur l'instruction proc format.


ancienne réponse:

Vous êtes généralement faire droit, si vous faites des choses de façon que vous n'avez pas besoin.

library libname doit être évitée. C'est quelque chose que les gens utilisent et qui ne savent pas comment utiliser les formats correctement, mais ce n'est vraiment pas une bonne idée, parce que cela donne une préférence particulière à la recherche de format d'une manière qui peut être problématique si vous en avez plusieurs. LIBRARY et WORK sont automatiquement dans la liste fmtsearch et ont la priorité absolue, sauf mention contraire. Mais cela ne vous aide pas vraiment quand le catalogue de format n'est pas formats.sas7bcat de toute façon.

Dans votre cas, vous devez simplement définir une fois (in) et faites ceci:

libname in 'U:/'; 
Options fmtsearch = (in.formats_raw work); 

Vous mis work là pour vous assurer que votre catalogue de format est prioritaire sur elle.

Ensuite, il devrait fonctionner, si vous avez un fichier formats_raw.sas7bcat dans ce dossier. Si vous ne le faites pas, alors vous pouvez avoir quelque chose d'autre (vous pouvez avoir un fichier qui est destiné à être importé via cntlin s'il s'agit d'un .sas7bdat par exemple).

Ceci est un exemple simple de ce travail:

libname temp 'c:\temp'; 
proc format lib=temp.formats_raw; 
    value YNF 
    1='Yes' 
    2='No' 
    ; 
quit; 

options fmtsearch=(temp.formats_raw work); 

data test; 
    x=1; 
    format x YNF.; 
    put x= ynf.; 
run; 

Modifier le fmtsearch à (temp work) et vous verrez échouer (depuis temp\formats.sas7bcat n'existe pas).

+0

Merci - le problème était que je n'avais pas exécuté cette instruction: 'proc format cntlin = in.formats_raw; quitter; ' – Bosley