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