SAS 在 Proc 步骤中执行循环

SAS Performing Loops in a Proc Step

我好像在网上找不到关于这个的信息...

我有一个变量列表,我想对其进行过程总结。由于这些 proc 摘要是针对每个变量单独执行的,如果我能找到某种方法来循环遍历编号的变量列表,然后创建输出到 excel 或简单地组合 table 对我来说会更快清楚地表明哪些结果属于哪些变量的结果。

问题是我只知道循环在 datastep 中工作,我如何让它在 proc 步骤中工作?我可以为 proc 步骤编写一个宏,然后将它嵌套在数据步骤中吗?这会导致它适当地 运行 吗?即

data _NULL_;
 set table_of_vars;

do i=1 to (number of vars in the table);

_n_ = i; 

%let var = _n_;
%macro_proc_summ(&var.);

end;

以及随后合并单个输出的另一个代码,或者宏甚至可以生成始终附加信息的输出。

显然代码很粗略,但从概念上讲这行得通吗?

编辑:为了更清楚一点,这是代码在没有循环的情况下的样子。

%macro Analysis(var); %macro _; %mend _;
proc summary data=masterdata nway missing; 
class &var.;
output out = &var._summ (drop = _type_);
run;
%mend;
endrsubmit;

%Analysis(var1);
%Analysis(var2);
%Analysis(var3);
.
.
.
.   
%Analysis(var100);

从这里我们可以:

无论哪种方式,您都可以看到这些是单独的 Proc 步骤,可以在循环中更快地完成这些步骤。

如果您不想要输出 table 使用 Proc Tabulate。

proc tabulate data=sashelp.class out=summary1;
class sex age;
var weight;
table sex age, weight*(n mean min max median);
run;

data summary2;
set summary1;
Var=coalescec(sex, put(age, 2.));
drop age sex _:;
run;

编辑:如果你只想要 N,而不是 proc 制表,使用 PROC FREQ

*Run frequency for tables;
ods table onewayfreqs=temp;
proc freq data=sashelp.class;
    table sex age;
run;

*Format output;
data want;
length variable . variable_value .;
set temp;
Variable=scan(table, 2);

Variable_Value=strip(trim(vvaluex(variable)));

keep variable variable_value frequency percent cum:;
label variable='Variable' 
    variable_value='Variable Value';
run;

*Display;
proc print data=want(obs=20) label;
run;