【问题标题】:SAS proc SQL and arraysSAS proc SQL 和数组
【发布时间】:2011-06-17 03:43:22
【问题描述】:

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

【问题讨论】:

    标签: sas


    【解决方案1】:

    这是一个使用 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;
    

    【讨论】:

    • 谢谢..我认为我们需要为此使用宏
    【解决方案2】:

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

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

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

    【讨论】:

    • Proc 意味着可以工作.. 但是如果你需要使用两个现有变量创建一个新变量(在 proc 语句中),那么 proc 意味着失败
    • 不确定您的意思——您在问题示例中使用了两个变量吗?您始终可以在数据视图中生成变量,而无需实际使用 I/O 资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    相关资源
    最近更新 更多