SAS proc SQL and arrays



这是一个SAS新手的问题。我有一个数据集,包含数值变量v1-v120V和分类变量Z(比如说有三个可能的值)。对于Z的每个可能值,我想得到另一组变量w1-w120,其中w{i}=sum(v{i}}/V,其中和是给定值Z的和。因此,在这种情况下,我正在寻找3*120矩阵。我可以在数据步骤中做到这一点,但希望通过Proc SQLProc MEANS来做到,因为实际数据集中的分类变量数量适中。提前谢谢。

这里有一个使用proc-sql的解决方案。您可能还可以使用proc做类似的事情,即使用输出数据集和"by"语句。

data t1;
    input z v1 v2 v3;
    datalines;
        1 2 3 4
        2 3 4 5
        3 4 5 6
        1 7 8 9
        2 4 7 9
        3 2 2 2
    ;
run;
%macro listForSQL(varstem1, varstem2, numvars);
    %local numWithCommas;
    %let numWithCommas = %eval(&numvars - 1);
    %local i;
    %do i = 1 %to &numWithCommas;
        mean(&varstem1.&i) as &varstem2.&i,
    %end;
    mean(&varstem1.&numvars) as &varstem2.&numvars
%mend listForSQL;
proc sql;
    create table t2 as
        select
            z,
            %listForSQL(v, z, 3)
        from t1
        group by z
    ;
quit;

使用proc means很容易做到这一点。使用Louisa Grey答案中的t1数据集:

proc means data=t1 nway noprint;
  class z;
  var v1-v3;
  output out=t3 mean=w1-w3;
run;

这将创建一个与SQL结果匹配的结果表。

最新更新