【问题标题】:Using 'Calculated' function on field prefixed with table alias - SAS SQL在以表别名为前缀的字段上使用“计算”​​函数 - SAS SQL
【发布时间】:2014-08-08 14:58:16
【问题描述】:

我试图让以下 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;

如果“计算”命令和字段名称之间没有表别名,则此代码将毫无问题地执行。有谁知道我正在寻找解决这个问题的语法?

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

谢谢

【问题讨论】:

    标签: sql sas


    【解决方案1】:

    CALCULATED 告诉它引用存在于输出(选择中)而不是输入数据集中的列,因此表别名没有任何意义。 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 只是一个重命名。

    【讨论】:

    • 对不起,是的,刚刚意识到我不需要别名。感谢您的帮助。
    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多