Sas 从库中加载用户生成的格式
我正在尝试创建一个用户生成的格式,将其保存到库中,然后使用该格式。出于某种原因,当我将格式保存到库中时,当我稍后尝试在proc print语句中使用它时,它似乎不起作用 每当我运行这段代码时,它不会抛出错误,但是varName的打印输出并没有按照我定义的方式格式化Sas 从库中加载用户生成的格式,sas,Sas,我正在尝试创建一个用户生成的格式,将其保存到库中,然后使用该格式。出于某种原因,当我将格式保存到库中时,当我稍后尝试在proc print语句中使用它时,它似乎不起作用 每当我运行这段代码时,它不会抛出错误,但是varName的打印输出并没有按照我定义的方式格式化 libname fmtLib'/FILEPATH1'; 数据格式数据; 填充'/FILEPATH2'dsd; 保留fmtname“$fname”; 输入start$label$; 跑 PROC format cntlin=格式数据库
libname fmtLib'/FILEPATH1';
数据格式数据;
填充'/FILEPATH2'dsd;
保留fmtname“$fname”;
输入start$label$;
跑
PROC format cntlin=格式数据库fmtLib;
跑
过程打印数据=数据集(obs=50);
设置varName$fname的格式。;
运行代码>确保告诉SAS在哪里可以找到新格式。使用FMTSEARCH
选项
让我们在两个不同的格式目录中制作相同格式的两个不同版本
proc format lib=work.formcat1 ;
value status 1='Good' 2='Bad' 3='Ugly';
run;
proc format lib=work.formcat2 ;
value status 1='1 Good' 2='2 Bad' 3='3 Ugly';
run;
因此,如果我只是将FMTSEARCH选项设置保留为默认值并设置NOFMTERR
,那么如果我打印样本数据
options nofmterr ;
proc print data=test;
title "%sysfunc(getoption(fmtsearch,keyword))";
format status status. ;
run;
它找不到任何状态。
格式,因此我可以看到原始值
FMTSEARCH=(WORK LIBRARY)
Obs status
1 1
2 2
3 3
但是如果我们在使用新的状态打印时将FMTSEARCH设置为seach FORMCAT1,然后设置为FORMCAT2。
格式
options fmtsearch=(work.formcat1 work.formcat2);
proc print data=test;
title "%sysfunc(getoption(fmtsearch,keyword))";
format status status. ;
run;
看起来是这样的:
FMTSEARCH=(WORK.FORMCAT1 WORK.FORMCAT2)
Obs status
1 Good
2 Bad
3 Ugly
如果我们颠倒搜索顺序,它会找到另一个版本的状态。
格式,因此输出如下所示
FMTSEARCH=(WORK.FORMCAT2 WORK.FORMCAT1)
Obs status
1 1 Good
2 2 Bad
3 3 Ugly
在第二个示例中它起作用的原因是您正在将格式加载到工作(或者可能是用户,但可能是工作)库中。这将自动成为格式搜索路径的一部分
将其加载到工作中很好,或者您可以使用Tom的建议来定义FMTSEARCH。这主要取决于您是在重复会话中使用此选项,还是仅在当前会话中使用此选项。您对FMTSEARCH
选项的设置是什么?非常感谢!!