根据迭代值向 SAS DO 循环添加额外步骤

问题描述 投票:0回答:2

我使用 DO 循环来运行 Proc SQL 查询,迭代变量列表。我想知道是否有一种方法可以在 i = 仅某些变量时向 DO 循环添加步骤,并跳过其余步骤? ABRV 和 PLAN_IDS 是我循环访问的变量列表中的字符串的组合。我想将其作为同一宏的一部分来执行此操作的原因是该程序通过自动化系统按计划运行。我想创建 7 个表,其中 6 个仅使用第一个查询,第 7 个仅使用 i=6 的变量(粗体)

%macro Create_Tables;
%do i =1 %to 6;
proc sql;
create table BASELINE_UTILIZATION&&ABRV&i as
select 
t1.PLAN_NAME,
t1.STATE_CODE,
t1."PLAN ID",
SUM(t1.Rx#) As BL_Rx,
SUM(t1.Qty) As BL_Qty
from report_table_1 t1 
where t1.State_Code = &&ABRV&i
AND t1."PLAN ID" IN (&&PLAN_IDS&i)
AND t1.Paiddate in ('202401') 
GROUP BY t1.PLAN_NAME, t1.STATE_CODE, t1."PLAN ID"
);
**IF i=6 THEN
create table EXTRA_UTILIZATION&&ABRV&i
proc sql;
select
t1.PLAN_NAME,
t1.STATE_CODE,
t1."PLAN ID",
SUM(t1.Rx#) *4 As BL_Rx_extra,
SUM(t1.Qty) *4 As BL_Qty_extra
from report_table_1 t1
where t1.State_Code = &&ABRV&i
AND t1."PLAN ID" IN (&&PLAN_IDS&i)
AND t1.Paiddate in ('202401') 
GROUP BY t1.PLAN_NAME, t1.STATE_CODE, t1."PLAN ID"
);**
%end;
%mend Create_Tables;
%Create_Tables
sas proc-sql enterprise-guide do-loops
2个回答
0
投票

使用 %IF 语句有条件地在宏中生成代码。

听起来你只想使用类似的东西:

%if &I = 6 %then %do;
* some statements here;
%end;
%else %do;
* other statements here;
%end;

0
投票

在 Tom 的帮助下,这是我能够正确运行的代码的基本结构:

%macro Create_Tables;
%do i=1 to i=6;
* Proc SQL Query 1
%if &i=6 %then% do;
* Proc SQL Query 2
%end;
%end;
%mend Create_Tables;
%Create_Tables;
© www.soinside.com 2019 - 2024. All rights reserved.