0

我有一个需要在 SAS Data Integration Studio 中执行的 SAS 9.3 程序(请参阅下文):

%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 ------> 用户编写 -----> 表加载器 -----> 合并

 %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 中正确执行此操作吗?

4

2 回答 2

0

当我们有加载技术时,为什么需要用户编写转换才能将数据插入现有表中 -> 附加到现有的可用表中。为什么要使用用户编写和加载器转换来做同样的工作。

于 2015-04-13T11:06:37.947 回答
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;

注意:您可以通过将代码生成模式设置为“用户编写的正文” 来在 UW 转换中生成代码, 或者如果您不希望生成代码,则可以使用“从下拉列表中编写的所有用户在下拉菜单中选择了用户书写正文的 UWC
所有用户编写

于 2015-10-26T23:25:51.640 回答