在SAS SQL中创建聚合的更快方法
我有一个名为test的数据集,变量区域为X1,X2,X3,X4……X20 我想按地区级别计算X1-X20的总量。我的代码如下:在SAS SQL中创建聚合的更快方法,sql,sas,Sql,Sas,我有一个名为test的数据集,变量区域为X1,X2,X3,X4……X20 我想按地区级别计算X1-X20的总量。我的代码如下: proc sql; create table test2 as select sum(X1) as X1, sum(X2) as X2,......, sum(X20) as X20 from test group by region; quit; 与手动输入每个变量中20个变量的总和相比,是否有更快的方法获取总和?谢谢大家! SAS宏
proc sql;
create table test2 as
select sum(X1) as X1, sum(X2) as X2,......, sum(X20) as X20
from test
group by region;
quit;
与手动输入每个变量中20个变量的总和相比,是否有更快的方法获取总和?谢谢大家! SAS宏的良好使用案例,但我也强烈推荐 正如@user667489所指出的,由于宏代码使用的是%DO循环,因此必须将代码块定义为命名的、可调用的宏%macro DO_test2…%修理一旦您将其定义为上述内容,您可以这样称呼它:
%do_test2;
%do_test2(20);
既然我们有这个要求,我们可以利用这种情况,将重复次数作为一个参数,以防您想要改变它。那么定义是:
%MACRO do_test2(num_reps);
proc sql;
create table test2 as
select
%DO i = 1 %TO &num_reps;
sum(X&i) as X&1
%IF &i ^= &num_reps %THEN , ;
%END;
from test
group by region;
quit;
%MEND;
你会这样称呼它:
%do_test2;
%do_test2(20);
SAS宏的良好使用案例,但我也强烈推荐 正如@user667489所指出的,由于宏代码使用的是%DO循环,因此必须将代码块定义为命名的、可调用的宏%macro DO_test2…%修理一旦您将其定义为上述内容,您可以这样称呼它:
%do_test2;
%do_test2(20);
既然我们有这个要求,我们可以利用这种情况,将重复次数作为一个参数,以防您想要改变它。那么定义是:
%MACRO do_test2(num_reps);
proc sql;
create table test2 as
select
%DO i = 1 %TO &num_reps;
sum(X&i) as X&1
%IF &i ^= &num_reps %THEN , ;
%END;
from test
group by region;
quit;
%MEND;
你会这样称呼它:
%do_test2;
%do_test2(20);
为什么使用PROC-SQL而不是PROC-MEANS
proc means noprint nway data=test ;
class region ;
var x1-x20;
output out=test2 sum=;
run;
为什么使用PROC-SQL而不是PROC-MEANS
proc means noprint nway data=test ;
class region ;
var x1-x20;
output out=test2 sum=;
run;
为什么不使用PROC-MEANS呢?是的,我想PROC-MEANS是一种用更少的代码转换数据的更快的方法为什么不使用PROC-MEANS呢?是的,我想PROC-MEANS是一种用更少的代码转换数据的更快的方法如果你想使用%do循环,你需要一个%macro和一个%mend。绝对-谢谢!真不敢相信我竟然忘了。正在修复。如果你想使用%do循环,你需要一个%macro和一个%mend。绝对-谢谢!真不敢相信我竟然忘了。现在修好。