我似乎无法在网上找到有关此内容的信息......
我有一个我想要进行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);
从这里我们可以:
无论哪种方式,您都可以看到这些是单独的Proc步骤,这可以在循环中更快地完成。
答案 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;