使用SAS格式目录
我在SAS中收到了一个数据集和一个格式目录,我正试图将其打开,但不知何故,我没有正确地应用格式目录。这是我使用的代码。我已经研究了SAS网站,我认为我有正确的步骤来调用目录,但它不起作用。我确信这是我犯的一个基本错误使用SAS格式目录,sas,data-formats,Sas,Data Formats,我在SAS中收到了一个数据集和一个格式目录,我正试图将其打开,但不知何故,我没有正确地应用格式目录。这是我使用的代码。我已经研究了SAS网站,我认为我有正确的步骤来调用目录,但它不起作用。我确信这是我犯的一个基本错误 libname in 'U:/'; libname library 'U:/'; Options fmtsearch = (library.formats_raw); data ae; set in.ae; format aeactae $AEMGMT. A
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
数据集的格式导入工作环境。如果要创建永久目录,应在proc format
语句中指定lib=in
或存储它们的位置
旧答案: 你通常做得对,尽管你做了一些你不需要做的事情 应避免使用库libname。这是一些不知道如何正确使用格式的人使用的东西,但这真的不是一个好主意,因为它在格式搜索中得到了特别的偏爱,如果你有多个格式,这种方式可能会有问题<代码>库和
工作
自动在fmtsearch列表中,除非明确列出,否则优先考虑。但当格式目录不是formats.sas7bcat
时,这实际上对您没有帮助
在您的情况下,只需定义一次(中的),然后执行以下操作:
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\formats.sas7bcat
不存在)。编辑:给定新信息,答案将更改。剩下的我留着,以防万一
您有一个格式数据集,而不是格式目录。您需要运行以下命令:
proc format cntlin=in.formats_raw;
quit;
导入格式。当然,这假设它是正确创建的-它至少应该有fmtname
,start
,label
,可能还有一些其他变量(type
,hlo
,end
是常见的)
这会将保存到SAS
数据集的格式导入工作环境。如果要创建永久目录,应在proc format
语句中指定lib=in
或存储它们的位置
旧答案:
你通常做得对,尽管你做了一些你不需要做的事情
应避免使用库
libname。这是一些不知道如何正确使用格式的人使用的东西,但这真的不是一个好主意,因为它在格式搜索中得到了特别的偏爱,如果你有多个格式,这种方式可能会有问题<代码>库和工作
自动在fmtsearch列表中,除非明确列出,否则优先考虑。但当格式目录不是formats.sas7bcat
时,这实际上对您没有帮助
在您的情况下,只需定义一次(中的),然后执行以下操作:
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\formats.sas7bcat
不存在)。格式目录的确切文件名是什么?U:/formats\U raw.sas7bdatAh,那么您就没有格式目录了!我道歉。。。发送了sas7bdat文件,然后通过运行一个过程,它将其转换为格式_raw.sas7bcat,我认为这是目录文件。格式目录的确切文件名是什么?U:/formats_raw.sas7bdatAh,那么您就没有格式目录了!我道歉。。。发送了sas7bdat文件,然后通过运行proc,它将其转换为格式_raw.sas7bcat,我认为这是目录文件。谢谢-问题是我没有运行此语句:“proc format cntlin=in.formats_raw;退出谢谢-问题是我没有运行以下语句:“proc format cntlin=in.formats\u raw;退出