在Proc sql sas中执行类似while循环的T-sql

时间:2018-03-22 10:05:26

标签: sas

我有以下的指标sas表

work.met_table
Metrics_Id   Metrics_desc
     1       Count_Column
     2       Sum_Column
     3       Eliminate_column

我想做一些像在T-sql中做while循环的事情

select count(*) :cnt_tbl from work.met_table

%let init_cnt = 1

while (&init_cnt = &cnt_tbl)
begin
   select Metrics_desc into :met_nm
   from work.met_table
   where metrics_id = 1

    Insert into some_sas_table
    Select * from another table where Metrics_desc =&met_nm
       /* Here I wanna loop all values in metrics table one by one */
end
%put &init_cnt = &int_cnt+1;

如何在proc sql中完成此操作?提前致谢

2 个答案:

答案 0 :(得分:1)

如果要动态生成代码,请使用SAS宏语言。

但是对于您的示例,无需动态生成代码。

proc sql ;
insert into some_sas_table
  select * 
  from another_table 
  where Metrics_desc in (select Metrics_desc from work.met_table)
;
quit;

答案 1 :(得分:0)

您也可以进行明确的传递。发送您的本机t-sql代码以通过SAS在数据库服务器上运行,而不是将数据带到SAS应用程序服务器进行查询。

以下示例详细解释here

PROC SQL;
CONNECT TO ODBC(DATASRC=SQLdb USER=&SYSUSERID) ;
/* Explicit PASSTHRU with SELECT */
SELECT *
FROM CONNECTION TO ODBC (
 SELECT b.idnum o.[SSdatecol] AS mydate
 FROM dbo.big_SS_table1 b
 LEFT JOIN dbo.other_SStable o
 ON b.idnum = o.memberid
 WHERE o.otherdatecol >= '2014-10-06'
 --This is a T-SQL comment that works inside SQL Server
 ) ;
;
DISCONNECT FROM ODBC ;
QUIT;