首页 > 解决方案 > 使用proc sql创建表时如何调用选择日期范围的提示?

问题描述

我想问一下如何在创建表的proc sql中调用提示(我正在使用SAS Enterprise Guide)。我有兴趣将一个数字关联到日期月份(如下表所示),其中可以使用提示选择 d_month。

time_window       d_month     database_name   table_name    short_name    group_field               field                  field_list
        1         '2018-02-28'       Dtb1         table1       Tab1        date_month department      Tab1.id Tab1.balance   id balance
        1         '2018-02-28'       Dtb1         table2       Tab2        date_month                  Tab2.credit            credit
        ...
        2         '2018-03-31'       Dtb1         table3       Tab3        date_month department       Tab3.debit             debit
        2         '2018-03-31'       Dtb2         table4       Tab4        date_month department    ...

我用了

   proc sql noprint;
    select time_w into time_w_lower from &time_table..time_table where time_last="&time_win_min_end"d;
    quit;

    proc sql noprint;
    select time_w into time_w_upper from &time_table..time_table where time_last="&time_win_max_end"d;
    quit;

创建最小和最大日期(这应该与提示相同),但是当我为新表选择字段时,我不知道如何使用此信息。时间和日期月份 ( d_month) 在一个表 ( &time_table..time_table) 中,而其他字段在另一个表 ( &dtb..&input.) 中。我尝试的是:

   proc sql;
    create table table_test4 as
    select t.time_window
           ,t.d_month
           ,&alias..date_month
           ,&alias..department
           ,%qsysfunc(dequote(&_factor.))
    from &dtb..&input. &alias.
    cross join time_window t
    order by 1,2,3,4;
    quit;

在哪里time_window创建的表如下:

  data time_window (drop=i);
      attr time_window length=8 format=11. informat=11.;
      attr d_month length=14 format=$12. informat=$12.;
      do =&time_w_lower. to time_w_upper.;
        time_window=left(put(i,4.));
        d_month=CAT("'", put(intent('month',"01JAN2010"d, i-1, 'end'), YYMMDDD10.),"'");
        output;
      end;
    run;

不幸的是,我没有可以显示的数据,因此您将提供给我的任何示例将不胜感激。

感谢您的时间。

标签: sqlsasenterprise-guide

解决方案


  1. 您应该使用数据范围类型创建提示: 在此处输入图像描述

  2. 将创建的提示添加到您的节点。 在此处输入图像描述

  3. 然后,您可以使用此提示中生成的宏变量。要知道生成了什么变量,您可以运行:

     %put _ALL_;
    

全球日期_MAX 31Dec2019

GLOBAL DATE_MAX_LABEL 2019 年 12 月 31 日

GLOBAL DATE_MIN 01Dec2019

GLOBAL DATE_MIN_LABEL 2019 年 12 月 1 日

因此,proc sql您可以在其中使用"&DATE_MAX."d和 " &DATE_MIN."dwhete DATE 是您的提示名称。


推荐阅读