将 SAS 数据集中的数据分配给变量(SAS E 指南 5.1)

Assigning data from SAS data set to variable (SAS E Guide 5.1)

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

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

这是我想象中的样子:

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

%LET newVariable = sasData.myRecordCount;

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

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

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

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

另外,您还可以通过使用 SEPARATED BY 指定分隔符将值列表存储到宏变量中。

如果您正在使用 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 
;