SAS - 选择库中满足特定名称约定的最后一个数据集

时间:2018-03-22 14:40:54

标签: sas sas-macro

假设我有一个名为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

现在我需要编写一个宏,专门从data_mtly_xxxxxx库中选择最新的mylib表。

例如,在当前阶段,应选择mylib.data_mtly_01DEC2017

但是,如果添加了新数据集,例如mylib.data_mtly_01JUN2018,则必须选择该表。

我怎样才能在SAS中这样做?

1 个答案:

答案 0 :(得分:0)

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

    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;
    
  5. 现在,您应该在宏变量中拥有最新的日期值,并且可以在代码中使用它。

       %put &latest_date.;
    

    如果它看起来像是数字而不是日期,则需要应用格式,但您应该能够使用PUT()进行转换。

    注意:代码未经测试。