sas宏分割数据集应该在哪里找到

时间:2016-07-27 15:03:34

标签: split macros sas

我有一个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个观察结果一起运行并最终合并到一个表中吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

对数据集(围绕proc sql语句)使用第二个宏do循环,调用计数器的宏变量,下一个开始观察以及下一批处理的观察数。然后,您可以使用firstobs=obs=在数据集选项中使用这些选项,例如(firstobs= &startobservation obs=&nobs)和数据集名称中的计数器宏变量。这也适用于proc sql。只需将选项添加到fromjoin语句中即可。 然后使用datastepproc appendproc sql; insert into

附加数据集