我有一个SAS宏部件,它将运行整个数据集并进行一些分析,在分析部分,每个实例一次处理一次。因此可以运行整个数据集,我们可以关注'log'文件。
但是,我想将整个数据集分成几个部分。 (例如,前500个观测值,501~1000个观测值等)。这意味着在运行500个实例后引擎将停止,然后再次运行。最后,它们可以像以前一样在一个表中生成。如何将此“拆分”部分添加到我之前的代码中?
初始代码:
%macro mymac;
OPTIONS NOTES SOURCE SOURCE2 MPRINT MLOGIC MERROR SYMBOLGEN;
/* Part A starts*/
data _null_;
set WORK.LOCATION end=last;
if last then call symput('nfiles',_n_);
run;
%do i=1 %to &nfiles;
data _null_;
set oriework.PO_LOC;
if &i=_n_ then call symput('code',LOCATION_ID);
run;
/* Part A ends */
%put &code;
proc sql;
create table WORK.pt as select
......
quit;
%if %sysfunc(exist(WORK.result)) %then %do;
data WORK.result;
set WORK.result WORK.pt;
run;
%end;
%else %do;
data WORK.result;
set WORK.pt;
run;
%end;
%end;
%mend;
%mymac;
其中'WORK.LOCATION'是我在'proc sql'程序中调用的数据集,其中包含我需要的所有'LOCATION_ID'信息。
A部分是Macro从开始到结束运行的地方;我可以用数据拆分程序替换它,以便每500个观察结果一起运行并最终合并到一个表中吗?
谢谢!
答案 0 :(得分:1)
对数据集(围绕proc sql
语句)使用第二个宏do循环,调用计数器的宏变量,下一个开始观察以及下一批处理的观察数。然后,您可以使用firstobs=
和obs=
在数据集选项中使用这些选项,例如(firstobs= &startobservation obs=&nobs)
和数据集名称中的计数器宏变量。这也适用于proc sql
。只需将选项添加到from
或join
语句中即可。
然后使用datastep
,proc append
或proc sql; insert into