【问题标题】:Passing a value from Netezza back to SAS using a macro variable使用宏变量将值从 Netezza 传回 SAS
【发布时间】:2018-10-10 18:26:49
【问题描述】:

我们使用的是 SAS 7.13 HF1 (7.100.3.5419)(64 位)

我目前正在查看一篇文章,该文章展示了如何将值从 SAS 传递到您要连接的数据库。这是下面的示例。您可以看到他们采用宏变量 StartDate 并将其传递给 Teradata 以在查询中使用。

%let StartDate = 2016/01/01;

proc sql;
   connect to teradata 
    (BULKLOAD=YES MODE=TERADATA user=&user. Password=&passwd.);

   CREATE TABLE WorkTest.test AS
   select * from connection to teradata
   ( 
        SELECT 
            TOP 10 *      
        FROM SomeCalendarData
        WHERE SomeDate = %bquote('&StartDate.');
   ); 
quit;

我想走另一条路。

如何从类似查询中读取值,只有我的数据库是 Netezza,并以某种方式将其传递给 SAS 中的宏变量?

谢谢!

【问题讨论】:

  • SAS 刚刚在此处发布了有关此主题的帖子:communities.sas.com/t5/SAS-Communities-Library/…
  • 需要明确的是,SAS 不会将宏变量传递给 Teradata。 SAS connection to 向 Teradata 发送 (dbms-query)。在这种情况下,查询是动态生成的,只要首先解析宏变量即可。一个微妙但重要的区别。
  • 酷。我可以使用哪些功能将输出限制为第一行?它不喜欢“limit 1”或 max() 或“group by”。它也不喜欢 trim()。什么有效?

标签: sql sas netezza sas-macro


【解决方案1】:

你会使用

SELECT <expression> INTO :<macro_var>'

声明。这在 PROC SQL 查询中可用,但在传递代码中不可用,所以它看起来像

proc sql;
   connect to teradata 
    (BULKLOAD=YES MODE=TERADATA user=&user. Password=&passwd.);

   select somedate into :my_macro_var from connection to teradata
   ( 
        SELECT somedate      
        FROM SomeCalendarData
        WHERE id = 101;
   ); 
quit;

在此处查看文档:http://support.sas.com/documentation/cdl/en/sqlproc/63043/HTML/default/viewer.htm#n1tupenuhmu1j0n19d3curl9igt4.htm

【讨论】:

  • 酷。我可以使用哪些功能将输出限制为第一行?它不喜欢“limit 1”或 max() 或“group by”。它也不喜欢 trim()。什么有效?
  • 据此:community.teradata.com/t5/Database/Limit-rows/td-p/5238 您将使用“sample 1”或“top 1”——我从未使用过 Teradata,因此无法进一步评论。在传递代码返回后,您可以在 SAS 端执行类似的操作,但效率会低得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多