在SQL语句中执行宏

凯奥·奥利维拉(Cao Oliveira)

情况:

我有一个mytable包含两列的表:tablenametablefield

|-----------|------------|
| tablename | tablefield |
|-----------|------------|
| table1    | id         |
| table2    | date       |
| table3    | etc        |
|-----------|------------|

我的核心目标基本上是Select 为每个表名创建一个,以显示MAX()其对应表字段值。

Proc SQL;
Select MAX(id) From table1;
Select MAX(date) From table2;
Select MAX(etc) From table3;
Quit;

ps:解决方案必须从表中提取数据,因此无论表是否更改其值,解决方案也将进行更改。

我试过的

从我的大多数尝试中,这是最复杂的,我认为离解决方案最近的是:

proc sql;
create table table_associations (
    memname varchar(255), dt_name varchar(255)
);

Insert Into table_associations 
values ("table1", "id")
values ("table2", "date")
values ("table3", "etc");
quit;

%Macro Max(field, table);
Select MAX(&field.) From &table.;
%mend;

proc sql;
Select table, field, (%Max(field,table))
From LIB.table_associations
quit;

创建宏后,我的意图很明确,但是对于此示例,我应该解决2个问题:

  • SQLStatement中执行宏
  • 使宏了解其字符串值参数作为SQL命令。
杰夫

在数据步骤中,您可以call execute用来执行您正在描述的事情。

%Macro Max(field, table);
proc sql;
Select MAX(&field.) From &table.;
quit;
%mend;

data _null_;
    set table_associations;
    call execute('%MAX('||field||','||table||')');
run;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章