2016-02-26 73 views
0

我似乎无法找到这个网上资料...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); 

从这里我们既可以:

  • 出口var1_summ,var2_summ到Excel单元格A1,D1等
  • 还是第一次我们每一个人的总结合并成一张大桌子,然后导出到 一些图形应用程序来观察趋势。

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

+0

您可以一次传递多个变量PROC总结和产生的组合输出。你根本不需要一个宏。 – Reeza

+0

@Reeza - 我觉得呢?我想“分类”一堆变量,并在单步完成时,输出不会唯一地组合变量内的各个级别......例如,Var1可以是Shoes,而Var2可以是Shirt,并且它们会If我将它们全部列在一个总结中,它将奇怪地合并信息...... – Wolfspirit

+0

你将如何处理数字和字符变量?您必须以某种方式处理它们,以便您可以将它们堆叠起来。听起来你想要表1报告文件 - 总结?如果是这样,你应该搜索lexjansen.com上有很多例子。否则,请使用call execute循环访问值。特别是如果参数在您的数据集中。 – Reeza

回答

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; 

编辑:不是PROC制表,如果只想N,使用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 $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; 
+0

我需要输出,但是您的解决方案明确捕获了我正在尝试执行的操作,特别是在“weight_N”列中 – Wolfspirit

+0

摘要2表具有输出。 – Reeza

+0

快速免责声明 - 我对Tabulate不太熟悉。据我所知,如果“n”是我需要的唯一统计量,那么我并不需要使用权重变量。 但是,当我试图将上面的代码应用于我自己的数据时,来自N的值与使用proc摘要由_freq_列生成的输出不同。为什么是这样? @Reeza – Wolfspirit