【发布时间】:2015-08-06 22:03:34
【问题描述】:
当我在 SAS 中使用宏 do 循环时,我正在为如何创建输出而苦苦挣扎。在常规数据步骤中,我可以创建以下带有变量 i 和 var 的数据集,以便在输出窗口中“打印”:
data example;
do i=1 to 4;
var = 2+i;
output;
run;
这将在输出窗口中创建,
Obs i var
1 1 3
2 2 4
3 3 5
4 4 6
现在,我的问题是我正在使用宏 do 循环,并且似乎无法执行与常规数据步骤相同的操作(即无法让我的结果显示在输出窗口中)。我的宏的目标是将“_new”添加到列表中每个变量名(A B C D)的末尾,然后我需要它显示在输出窗口中。
%let myvarlist=A B C D;
%macro create_new;
%let mlength=%countlength(&myvarlist);
%let suffix=new;
%do n=1 %to &mlength;
%let var_n=%qscan(&myvarlist,&n);
%let my_new_varlist=&var_n._&suffix;
%end;
%mend;
%create_new
我能得到的最接近的工作是将%put &my_new_varlist; 放在%end 语句之前,但这会将它放在日志窗口中。我尝试在数据步骤中插入我的 do 循环,然后使用 proc 打印,但这不起作用。
宏%countlength 是我用来计算列表中变量数量的宏。它的代码是:
%macro countlength(char);
%local num inputword;
%let num=1;
%let inputword=%qscan(&char,&num,%str( ));
%do %while(&inputword NE);
%let num=%eval(&num+1);
%let inputword=%qscan(&char,&num,%str( ));
%end;
%eval(&num-1);
%mend;
【问题讨论】:
-
我认为没有一种方法可以轻松做到这一点。您可以创建一个数据步骤并进行打印。我想知道您总体上要做什么。
-
是的,这是一个非常奇怪的要求。为什么不直接填充表格,然后使用您喜欢的方法打印到输出屏幕?