【问题标题】:Assigning data from SAS data set to variable (SAS E Guide 5.1)将 SAS 数据集中的数据分配给变量(SAS E Guide 5.1)
【发布时间】:2015-08-27 14:04:27
【问题描述】:

我使用 SAS 执行查询,有时会在之后向我的团队发送电子邮件以确认查询已执行。但是,除非我手动检查,否则我永远不知道它是否成功。

例如,我有一个 SAS 作业,它执行一个存储过程,该过程会附加一个包含今天更多数据的表。我希望能够将该表中的 MAX(date) 添加到电子邮件文本中,或者将今天的日期添加到电子邮件中的 COUNT(*),这样我就可以知道添加了多少条记录。

这是我想象中的样子:

PROC SQL;
    CREATE TABLE sasData AS
    SELECT 
        COUNT(*) AS myRecordCount
    FROM
        tableName
;QUIT;

%LET newVariable = sasData.myRecordCount;

所以,我知道上面不是它的工作原理,而是它的想法。

谁能告诉我如何正确地做到这一点?谢谢!

【问题讨论】:

    标签: sas sas-macro proc-sql


    【解决方案1】:

    您可以使用下面的方法将结果直接存储在宏变量中:

    PROC SQL NOPRINT;
        SELECT
            count(*) INTO:myRecordCount
        FROM tableName;
    QUIT;
    

    顺便说一句,您还可以使用 SEPARATED BY 指定分隔符,将值列表存储到宏变量中。

    【讨论】:

      【解决方案2】:

      如果您使用 SQL,您可以在自动宏变量 SQLOBS 中获取上一个 SQL 语句处理的观察计数。将其保存到另一个宏变量中,因为它将在下一条 SQL 语句运行时被覆盖。

      proc sql ;
        create table class as select * from sashelp.class ;
      %let nobs=&sqlobs ;
        insert into class select * from sashelp.class where name like 'A%' ;
      %let nobs2=&sqlobs ;
      
      %put &=nobs &=nobs2 ;
      NOBS=19 NOBS2=2
      

      您可以使用 INTO 子句创建宏变量。

      select count(*)
           , max(age)
      into :nobs3 trimmed 
         , :max_age trimmed
      from sashelp.class 
      ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        • 2017-08-19
        • 1970-01-01
        相关资源
        最近更新 更多