SAS DI(数据集成):在现有表中插入数据

时间:2014-04-14 09:32:49

标签: sas sas-macro sas-dis

我在SAS 9.3中有一个程序(请参阅下面的内容)我需要在SAS数据集成工作室中执行:

%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中执行此操作,我在下面的“User Written”中执行了步骤和代码:

  

RAW ------>用户书面----->表装载机----->合并

 %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 个答案:

答案 0 :(得分:0)

为什么在我们有加载技术时需要用户编写的转换来将数据插入到现有表中 - >附加到现有的可用。为什么要使用用户编写的&装载机改造做同样的工作。

答案 1 :(得分:0)

由于您使用用户编写代码的原因,首先应该避免在SAS DI工作室中使用,您可以按照以下方式重新安排代码,

* 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;

注意:您可以通过将代码生成模式设置为“用户书写正文” UWC with User Written Body selected in DropDown来生成UW转换代码 或者如果您不想生成代码,那么您可以使用“所有用户书面从下拉列表All User Written