可以用宏,但并非只能用宏。
宏的本质是文本替换,一些材料中也将宏程序称为“用来写程序的程序”。在data步中,有 call execute() 子例程、dosubl() 函数可以做到类似的效果。
下例使用 call execute() 解决本题。
- data have;
- input varname $ 1-10 varlabel $ 11-24 vartype $;
- cards;
- _PCSADT PCSA Date $10
- _PCSACV PCSA Version $15
- _PHASE Phase 8
- ;
- run;
- data _null_;
- set have end=eof;
- if _n_=1 then call execute('data want;');
- call execute('attrib '||trim(varname)||' label="'||trim(varlabel)||'" length='||trim(vartype)||';');
- if eof then call execute('call missing(of _all_); stop; run;');
- run;
复制代码执行程序,你将在日志窗口看到如下图所示信息。
上述代码在 data _null_ 数据步中进行组装并递交,在 data _null_ 数据步之后被编译和执行。