Как вызвать подсказку, которая выбирает диапазон дат, когда я создаю таблицу с помощью proc sql?

Я хотел бы спросить, как вызвать подсказку (я использую SAS Enterprise Guide) в процедуре sql, которая создает таблицу. Я заинтересован в том, чтобы связать число с датой месяца (как в таблице ниже), где 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;

К сожалению, у меня нет данных, которые я могу показать, поэтому любой пример, который вы мне предоставите, будет очень признателен.

Спасибо за ваше время.


person still_learning    schedule 09.12.2019    source источник


Ответы (1)


  1. Вы должны создать приглашение с типом диапазона данных: введите здесь описание изображения

  2. Добавьте созданную подсказку к вашему узлу. введите здесь описание изображения

  3. Затем вы можете использовать сгенерированные макропеременные из этой подсказки. Чтобы узнать, какая переменная была сгенерирована, вы можете запустить:

     %put _ALL_;
    

ГЛОБАЛЬНАЯ ДАТА_MAX 31 декабря 2019 г.

ГЛОБАЛЬНАЯ DATE_MAX_LABEL 31 декабря 2019 г.

ГЛОБАЛЬНАЯ ДАТА_MIN 01 декабря 2019 г.

ГЛОБАЛЬНАЯ ДАТА_MIN_LABEL 01 декабря 2019 г.

Таким образом, в proc sql вы можете использовать "&DATE_MAX."d, а "&DATE_MIN."d где ДАТА – это имя подсказки.

person Alexey Sigida    schedule 09.12.2019