SAS在Proc步骤中执行循环

时间:2016-02-26 01:03:06

标签: loops sas proc

我似乎无法在网上找到有关此内容的信息......

我有一个我想要进行proc摘要的变量列表。由于这些proc汇总是按变量单独执行的,如果我能找到某种方法循环编号的变量列表,然后创建一个excel的输出,或者只是一个结果表,清楚地表明结果属于什么,对我来说会更快什么变量。

问题是我只知道在一个datastep中做循环工作,我怎么能让它用于proc步骤?我可以为proc步骤编写一个宏,然后将其嵌套在datastep中吗?这会导致它运行得当吗?即。

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);

从这里我们可以:

  • 将单元格A1,D1等中的var1_summ,var2_summ导出到Excel
  • 或者首先将我们各自的摘要合并到一个大表中,然后导出到 一些图形应用程序来看待趋势。

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

1 个答案:

答案 0 :(得分:0)

如果您不想要输出表,请使用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 FREQ

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

*Format output;
data want;
length variable $32. variable_value $50.;
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;