2017-01-27 55 views
0

为了创建一个复杂的分析,我有一个程序将包含一些不同的其他程序,每个程序都有一个特定的目的(主要针对每个分析,一个针对宏,一个针对格式等)。 )。只需点击最终计划,所有分析就能顺利进行。来自宏执行的代码

基本上我现在想要的是实现一个系统,它将能够重写一个文档中的所有代码:用正确的代码爆炸宏,用正确的datastep代码爆炸%do循环,删除%let语句,但解析宏变量,等等(例如在帖子的底部)。

我唯一的想法是保存日志,使用MPRINT选项写入所有内容,在datastep执行后删除注释以及其他与datastep无关的其他内容。但是这个方法真的很脏,所以我想请问,如果你有更好的想法如何继续下去。

这是2个嵌套程序为例:

main.sas 

----------------------------------------------------- 

/* My MAIN PROGRAM */ 

%let PGM=MAIN; 
%put This is my &pgm. program; 

%let LIB=MYLIB; 

%include &LIB.(FIRST.sas); 

----------------------------------------------------- 

first.sas 

----------------------------------------------------- 

%let ind=2; 

%macro ABC; 
%do rk=1 %to &ind.; 

data A&rk.; 
MYVAR=&rk.; output; 
run; 

%end; 
%mend; %ABC; 

----------------------------------------------------- 

,我会得到的文件是这样的:

/* My MAIN PROGRAM */ 

%put This is my MAIN program; 

data A1; 
MYVAR=1; output; 
run; 

data A2; 
MYVAR=2; output; 
run; 

什么建议吗?你有没有发现这个?你如何解决它?非常感谢。

回答

0

见例2浏览:

http://support.sas.com/documentation/cdl/en/mcrolref/69726/HTML/default/viewer.htm#p1dhqw0i5yj2m8n15opapnwteqra.htm

您可以添加这些选项到你的程序:

options mfile mprint; 
filename mprint 'debugmac'; 

和所有生成的代码将出现在指定的输出文件。这将而不是包括%PUT声明 - 在你的例子中,你想要的输出包括%PUT声明。上面的选项只是将所有正常的MPRINT行重定向到一个文件,因此不包括开放代码或宏语句。根据您的确切需要,您可能可以找到一种将标头附加到MPRINT文件的方法。

说了这么多,我不会推荐你的方法。你为什么要以这种方式将该计划展平?这是不太可能有任何明显的性能优势,并且将来会更难调试或修改程序。