SAS - 选择库中满足特定名称约定的最后一个数据集
SAS - Choose last dataset in library that satisfies specific name convention
假设我有一个名为 mylib
的库。
在 mylib
库中,保存了以下数据集:
mylib.data_yearly_2015
mylib.data_yearly_2016
mylib.data_yearly_2017
mylib.data_yearly_2018
mylib.data_yearly_2015
mylib.data_mtly_01JUN2015
mylib.data_mtly_01DEC2015
mylib.data_mtly_01JUN2016
mylib.data_mtly_01DEC2016
mylib.data_mtly_01JUN2017
mylib.data_mtly_01DEC2017
现在我需要编写一个宏,专门从 mylib
库中选择最新的 data_mtly_xxxxxx
table。
比如当前阶段应该选择mylib.data_mtly_01DEC2017
但是,如果添加了新数据集,例如 mylib.data_mtly_01JUN2018
,则必须选择 table。
如何在 SAS 中执行此操作?
- 获取所有数据集的列表
- 使用 SCAN() 和 INPUT() 获取日期部分
获取最大日期。
Proc sql noprint;
Select max(input(scan(name, -1, ‘_’), date9.) ) into :latest_date
From sashelp.vtable
Where upcase(libname) = ‘MYLIB’ and upcase(memname) like ‘DATA_MTLY_%’;
Quit;
现在您应该在宏变量中有最新的日期值,并且可以在您的代码中使用它。
%put &latest_date.;
如果它看起来像数字而不是日期,您将需要应用格式,但您应该能够使用 PUT() 对其进行转换。
注意:代码未经测试。
假设我有一个名为 mylib
的库。
在 mylib
库中,保存了以下数据集:
mylib.data_yearly_2015
mylib.data_yearly_2016
mylib.data_yearly_2017
mylib.data_yearly_2018
mylib.data_yearly_2015
mylib.data_mtly_01JUN2015
mylib.data_mtly_01DEC2015
mylib.data_mtly_01JUN2016
mylib.data_mtly_01DEC2016
mylib.data_mtly_01JUN2017
mylib.data_mtly_01DEC2017
现在我需要编写一个宏,专门从 mylib
库中选择最新的 data_mtly_xxxxxx
table。
比如当前阶段应该选择mylib.data_mtly_01DEC2017
但是,如果添加了新数据集,例如 mylib.data_mtly_01JUN2018
,则必须选择 table。
如何在 SAS 中执行此操作?
- 获取所有数据集的列表
- 使用 SCAN() 和 INPUT() 获取日期部分
获取最大日期。
Proc sql noprint; Select max(input(scan(name, -1, ‘_’), date9.) ) into :latest_date From sashelp.vtable Where upcase(libname) = ‘MYLIB’ and upcase(memname) like ‘DATA_MTLY_%’; Quit;
现在您应该在宏变量中有最新的日期值,并且可以在您的代码中使用它。
%put &latest_date.;
如果它看起来像数字而不是日期,您将需要应用格式,但您应该能够使用 PUT() 对其进行转换。
注意:代码未经测试。