重复几个数据集并处理 sql
Repeat several datasets and proc sql
我有包含数据集和过程的程序 sql。
在程序结束时,我想检查最终值并决定是否应该使用不同的参数再次执行程序的这一部分,或者该值是否正确。
有什么方法可以循环数据集和 procsql 吗?
(例如,我想重复下面的所有代码。)
proc sql;
create table first as
select * from qw;
quit;
data st;
a = 1
run;
proc sql;
create table st as
select * from fir;
quit;
非常感谢您的帮助。
米甲
您需要创建一个带有 do-while 循环的宏。您没有指定值是什么、从哪里获取它们或要如何停止,但希望这个想法足以让您开始。
如果您正在研究最小化或优化问题并且有 SAS/IML 或 SAS/OR,您可能想看看他们是否有对您的情况有帮助的过程。
%macro loop (threshold);
%do %while (&value < &threshold);
proc sql;
create table first as
select * from qw;
quit;
data st;
a = 1
run;
proc sql;
create table st as
select soucet +1 into :value from fir;
quit;
%end;
%mend;
编辑:
在 set 语句上使用 end= 选项。如果它是最后一条记录,则创建一个可用于循环的宏变量。
Set end=eof;
if eof then do;
call symputx('soucet', soucet);
end;
我有包含数据集和过程的程序 sql。 在程序结束时,我想检查最终值并决定是否应该使用不同的参数再次执行程序的这一部分,或者该值是否正确。
有什么方法可以循环数据集和 procsql 吗? (例如,我想重复下面的所有代码。)
proc sql;
create table first as
select * from qw;
quit;
data st;
a = 1
run;
proc sql;
create table st as
select * from fir;
quit;
非常感谢您的帮助。 米甲
您需要创建一个带有 do-while 循环的宏。您没有指定值是什么、从哪里获取它们或要如何停止,但希望这个想法足以让您开始。
如果您正在研究最小化或优化问题并且有 SAS/IML 或 SAS/OR,您可能想看看他们是否有对您的情况有帮助的过程。
%macro loop (threshold);
%do %while (&value < &threshold);
proc sql;
create table first as
select * from qw;
quit;
data st;
a = 1
run;
proc sql;
create table st as
select soucet +1 into :value from fir;
quit;
%end;
%mend;
编辑:
在 set 语句上使用 end= 选项。如果它是最后一条记录,则创建一个可用于循环的宏变量。
Set end=eof;
if eof then do;
call symputx('soucet', soucet);
end;