使用 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;
导入格式。这当然假设它是正确创建的——它应该至少有 fmtname
、start
、label
,可能还有一些其他变量(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
,那么它应该可以工作。如果你不这样做,那么你可能会发生其他事情(例如,如果它是 .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
不存在)。
我在 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;
导入格式。这当然假设它是正确创建的——它应该至少有 fmtname
、start
、label
,可能还有一些其他变量(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
,那么它应该可以工作。如果你不这样做,那么你可能会发生其他事情(例如,如果它是 .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
不存在)。