繁体   English   中英

SAS 宏到 Teradata 语法

[英]SAS macro to Teradata syntax

我有一个 SAS 宏,当给定不同的 arguments 时,它会创建几个表。 它看起来像这样:

%macro create_tables(key, value);
data WORK.TABLE_&key.:
    set WORK.MAIN_TABLE;
        where col = &value.;
        col_&key. = 1;
        drop col;
%mend create_tables;

关键参数/宏变量被注入到表名中。 我用不同的键和值多次调用这个宏。

我想将这段代码转换成 Teradata 语法。 我可以为每个键和值创建多个表,但我有 30 多个键和值。 在 Teradata 中实现此目标的最佳方法是什么? 创建多个表会更有效率吗? 创建的每个表的行数将在 100 万到 200 万之间,而 MAIN_TABLE 有 30+ 万行。

我同意 Tom 的观点,即创建大量仅包含原始数据的特定部分的新表的原因并不明显。 因此,如果您想要这些额外的列(列 col 的每个值一列),那么恕我直言,以下代码似乎是 SAS 中的最佳解决方案。在这里,一个视图是由 SAS 宏创建的,您可以在其中指定一个或多个通过宏参数 KEY 的值。 对于每个值,结果视图中都会有一个新列,其值为 1 和 0。 如果您只想要具有一个特定值的行,那么您可以基于此视图执行此操作。

%macro create_colkeys (KEY=);

%let NUMWORDS = %sysfunc(countw(&KEY.));
%do i=1 %to &NUMWORDS.;
  %let KEY_&i.=%scan(&KEY,&i.);
%end;

proc sql;
  create view col_flags as
  select 
     %do i=1 %to &NUMWORDS.;
        case when col="&&KEY_&i." then 1 
                              else 0 
        end as col_&&KEY_&i..,
     %end;
     *
  from main_table;
quit;
%mend;

%create_colkeys(KEY = abc def xyz);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM