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 中执行此操作?

  1. 获取所有数据集的列表
  2. 使用 SCAN() 和 INPUT() 获取日期部分
  3. 获取最大日期。

    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() 对其进行转换。

注意:代码未经测试。