Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SAS SQL中创建聚合的更快方法_Sql_Sas - Fatal编程技术网

在SAS SQL中创建聚合的更快方法

在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宏

我有一个名为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宏的良好使用案例,但我也强烈推荐

正如@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。绝对-谢谢!真不敢相信我竟然忘了。现在修好。