在带有表别名前缀的字段上使用“计算”​​功能 - SAS SQL

时间:2014-08-08 14:58:16

标签: sql sas

我正试图让以下Proc SQL步骤在SAS 9.2中运行,但它正在倒下,因为它似乎不喜欢我使用表别名来定义合并期间两个表中的字段:

proc sql;
create table test1 as 
select 
a.var1,
b.var2 * -1 as var2,
b.var3,
calculated b.var1 * a.var2 as var4
from table1
left join
table2
on a.var5 = b.var5;
quit;

如果没有'Calculated'命令和字段名称之间的表别名,则此代码将毫无问题地执行。有谁知道我想要解决这个问题的语法?

如果我不使用计算的命令,则SQL步骤无法识别定义字段'var1'时使用的计算。

由于

2 个答案:

答案 0 :(得分:3)

CALCULATED告诉它引用输出中存在的列(在select中),而不是在输入数据集中,因此表别名没有任何意义。你只需要CALCULATED var2

proc sql;
  create table test1 as 
   select 
     a.var1,
     b.var2 * -1 as var2,
     b.var3,
     calculated var2 * a.var1 as var4
   from table1
    left join table2
    on a.id=b.id;
quit;

这没关系,只要它没有决定b.var2 * -1只是重命名。

答案 1 :(得分:2)

您正在尝试创建一个包含两个具有相同名称(var1)的列的表。 proc sql抱怨我并不感到惊讶。尝试给他们不同的名字:

proc sql;
create table test1 as 
    select a.var1 as a_var1,
           b.var1 * -1 as b_var1,
           b.var2,
           calculated b_var1 * a.var1 as var3
    from table1 left join
         table2
         on a.var4 = b.var4;
quit;