从库中加载用户生成的格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从库中加载用户生成的格式相关的知识,希望对你有一定的参考价值。

我正在尝试创建用户生成的格式,将其保存到库中,然后使用该格式。出于某种原因,当我将格式保存到库时,当我稍后尝试在proc print语句中使用它时,它似乎不起作用。

每当我运行此代码时,它不会抛出错误,但varName的打印输出没有按照我定义的方式进行格式化。

libname fmtLib '/FILEPATH1';

DATA formatData;
	INFILE '/FILEPATH2' dsd;
	retain fmtname '$fname';
	Input start $ label $; 
run;

PROC format cntlin= formatData library fmtLib;
run;

proc print data = dataset (obs = 50);
	format varName $fname.;
run;

但是,如果我使用此代码:

libname fmtLib '/FILEPATH1';

DATA formatData;
	INFILE '/FILEPATH2' dsd;
	retain fmtname '$fname';
	Input start $ label $; 
run;

PROC format cntlin= formatData;
run;

proc print data = dataset (obs = 50);
	format varName $fname.;
run;

varName格式正确。我不确定为什么保存或不保存在库中的格式会有所不同。任何帮助表示赞赏。

答案

确保告诉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;

它没有找到任何STATUS.格式,所以我看到了原始值。

FMTSEARCH=(WORK LIBRARY)

Obs    status

 1       1
 2       2
 3       3

但是,当我们使用新的qazxsw poi格式打印时,我们将FMTSEARCH设置为搜索FOR CAT 1,然后设置FORMCAT2

STATUS.

它看起来像这样:

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 格式的其他版本,因此输出看起来像这样。

STATUS.
另一答案

它在第二个示例中起作用的原因是您将格式加载到WORK(或可能是USER,但可能是WORK)库中。这自动成为您的格式搜索路径的一部分。

加载到工作中很好,或者您可以使用Tom的建议来定义FMTSEARCH。这主要取决于您是在重复会话中使用它还是仅在当前会话中执行此操作。

以上是关于从库中加载用户生成的格式的主要内容,如果未能解决你的问题,请参考以下文章

使用 AS 2 将影片剪辑从库中加载到舞台

只有在被选中时才在 ViewPager 中加载片段

从mysql的片段中加载ListView

使用片段在可Swipable选项卡中加载首选项设置

在一个活动中加载单个片段两次,从本地json文件中加载2个问题

我无法在片段中加载数据 json