【问题标题】:Use dataset observations in where clause of Proc SQL when reading Oracle database读取Oracle数据库时在Proc SQL的where子句中使用数据集观察
【发布时间】:2014-09-04 18:49:09
【问题描述】:

我刚刚完成了基础课程,对 SAS 还是很陌生,所以这可能是一门简单的课程。

我正在将数据从 Oracle 数据库中提取到 SAS 中,我想知道我是否可以在 Proc SQL 查询的 where 子句中使用数据集中的基本观察列表来仅读取相关数据。

在银行工作我有一个帐号列表(字符格式),我想将所有交易数据提取到一个新的数据表中。 Oracle数据库包含数千个帐号,但我只需要每天读取某些帐号,这些帐号每天都会发生变化(因此无法硬编码)。我们通过使用 Proc SQL 函数提取数据,我想为基础数据集中的每个帐号重复 Proc SQL 过程多次,每次迭代时在 where 子句中填充新帐号。

我研究过宏变量,但并不真正了解它们如何工作或它们是否会工作。有人可以帮忙吗?

谢谢 安迪

【问题讨论】:

    标签: oracle sas


    【解决方案1】:

    举例说明:

    %let AccNums="100","200","300"; /* this creates & populates a macro variable */
    
    proc sql;
    connect to odbc as mycon
       (datasrc=ora7 user=testuser password=testpass);
    
    select * from connection to mycon
      (select x,y,z from MYTABLE 
        where Account_number in (&AccNums) /* this resolves the macro variable*/
    );
    quit;
    

    有关详细信息,请参阅文档 here。请注意,您建议的方法(迭代每个帐号)效率低下,因为会涉及多个源查询(和相应的网络流量)。最好将帐号保存在一个或多个宏变量中并以这种方式提交。请注意,单个宏变量只能容纳 65,534 个字符。

    【讨论】:

      【解决方案2】:

      使用libname 连接连接到oracle,然后您可以将帐号列表读入SAS(大概这些在文本文件或excel文件中,或者可以放入其中)并将该表连接到oracle表。

      libname myoradb oracle <connection string>;
      
      proc sql;
       create table accts as 
         select * from myoradb.accts O, acctsIwant A
          where O.acctno=A.acctno;
      quit;
      

      假设 acctsIwant 是一个 SAS 数据集(您可以从任何有意义的位置读取)。

      【讨论】:

      • 这是一种更简单的方法,但从以前在银行工作的经验来看,这里的风险是 myoradb.accts 是一个巨大的表,这可能会导致大量网络流量试图将其拉入 SASWORK。 .
      • 虽然 Oracle 的 SAS/Access 引擎可能足够聪明,可以尝试阻止这种情况
      • 据我了解,这不应该需要与您的方法相关的任何额外网络流量; SAS 应该翻译查询并将其推送到 Oracle。显然,如果它没有,那么不要这样做:) 我宁愿然后而不是使用宏变量将数据推送到 Oracle 中的临时表。
      • Access 引擎确实可以将查询(和函数等)转换为 DB 特定/优化的语法,但这里的问题是 ACCTSIWANT 是一个 SASWORK 表,所以它能够将该表推送到DB为了做加入?也许 - 我不知道..
      • 从 OP 的角度来看 - 我建议尝试这两种方法,看看哪种方法更适合您的环境/情况。
      猜你喜欢
      • 2015-04-19
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      相关资源
      最近更新 更多