1

我在 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.
4

1 回答 1

0

编辑:鉴于新信息,答案会发生变化。我留下其余的以防它有用。

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

proc format cntlin=in.formats_raw;
quit;

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

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


老答案:

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

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

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

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

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

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

这是此工作的一个简单示例:

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不存在)。

于 2017-03-16T14:22:21.250 回答