使用 SAS 格式目录

Using a SAS format catalogue

我在 SAS 中收到了一个数据集和一个格式目录,我试图打开它,但不知何故我没有正确应用格式目录。这是我用过的代码。我研究了 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;

对于每个变量,我在日志中收到以下错误:

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

编辑:鉴于新信息,答案发生了变化。剩下的我留着以备不时之需。

您有格式数据集,而不是格式目录。您需要 运行 这个:

proc format cntlin=in.formats_raw;
quit;

导入格式。这当然假设它是正确创建的——它应该至少有 fmtnamestartlabel,可能还有一些其他变量(typehlo, end 很常见).

这会将保存到 SAS 数据集的格式导入工作环境。如果你想创建一个永久目录,你应该指定 lib=in 或者你希望它们存储在 proc format 语句中的任何地方。


旧答案:

您通常做对了,尽管您以不需要的方式做了一些事情。

library libname 应该避免。这是不知道如何正确使用格式的人使用的东西,但它确实不是一个好主意,因为它在格式搜索方面有特殊的偏好,如果你有多个格式,可能会出现问题。 LIBRARYWORK 自动出现在 fmtsearch 列表中,除非明确列出,否则优先考虑。但是,当格式目录不是 formats.sas7bcat 时,这实际上对您没有帮助。

在您的情况下,您应该只定义一次 (in),然后执行此操作:

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

您将 work 放在那里以确保您的格式目录优先于它。

如果该文件夹中有文件 formats_raw.sas7bcat,那么它应该可以工作。如果你不这样做,那么你可能会发生其他事情(例如,如果它是 .sas7bdat,你可能有一个打算通过 cntlin 导入的文件)。

这是一个简单的例子:

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;

fmtsearch 更改为 (temp work),您将看到它失败(因为 temp\formats.sas7bcat 不存在)。