SAS DI (интеграция данных): вставка данных в существующую таблицу

У меня есть программа в SAS 9.3 (см. Ниже), которую мне нужно сделать в SAS Data Integration Studio:

%macro sqlloop;
  Proc SQL;
   Select distinct(DATE) into :raw_date from RAW;
  Quit;
  %DO k= %sysevalf("&raw_date"d) %TO  %eval(%sysfunc(today())-1);
   PROC SQL;
    insert into CONSOLIDATED (BRANCH_CD, RC_NAME, DATE)
    select BRANCH_CD, RC_NAME, &k.
    from RAW;
   QUIT;
  %END;
%mend;
%sqlloop;

Чтобы сделать это в SAS Data Integration Studio, я сделал шаг и код внутри "Пользовательский" ниже:

RAW ------> Пользовательский -----> Table Loader -----> Консолидированный

 %let output= &_output;
 %let MySYSLast= &SYSLast;
 %macro sqlloop;
  Proc SQL;
   Select distinct(DATE) into :raw_date from &MySYSLast;
  Quit;
  %DO k= %sysevalf("&raw_date"d) %TO  %eval(%sysfunc(today())-1);
   PROC SQL;
    insert into &output (BRANCH_CD, RC_NAME, DATE)
    select BRANCH_CD, RC_NAME, &k.
    from &MySYSLast;
   QUIT;
  %END;
 %mend;
 %sqlloop;

Тем не менее я получаю сообщение об ошибке в SAS DI. Могу ли я знать, как сделать это правильно в SAS DI?

2 ответа

По какой-либо причине вы используете написанный пользователем код, которого следует избегать в первую очередь в SAS DI studio, вы можете перестроить свой код, как показано ниже,

* Remove the 2 %LET statements as DI studio generates code for it already;
%macro sqlloop;

   proc sql noprint;
     /* change the &MYSYSLAST to &_INPUT, this is the first input you connected to the transform */
     select distinct(date) into :raw_date from &_INPUT. ;
   quit;

   %do k= %sysevalf("&raw_date"d) %to  %eval(%sysfunc(today())-1);

      proc sql noprint;
         /* Change the &OUTPUT to &_OUTPUT as that is the standard output for the UW Transform in SAS DI */
         insert into &_OUTPUT. (branch_cd, rc_name, date)
         select branch_cd, rc_name, &k.
         from &_INPUT. ; /* Change &mysyslast to &_INPUT
      quit;

   %end;

%mend sqlloop;

%sqlloop;

ПРИМЕЧАНИЕ. Вы можете генерировать код в UW-преобразовании, установив режим генерации кода в "Пользовательское тело". UWC с выбранным пользователем телом, выбранным в DropDown
или если вы не хотите, чтобы код генерировался, вы можете использовать "Все написано пользователем из выпадающего списка". Все написано пользователем

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

Другие вопросы по тегам