SAS proc SQL и массивы - PullRequest
       2

SAS proc SQL и массивы

1 голос
/ 17 июня 2011

Это вопрос новичка SAS.У меня есть набор данных с числовыми переменными v1-v120, V и категориальной переменной Z (скажем, с тремя возможными значениями).Для каждого возможного значения Z я хотел бы получить другой набор переменных w1-w120, где w {i} = сумма (v {i}} / V, где сумма является суммой по данному значению Z. Таким образом,В этом случае я ищу матрицу 3 * 120. Я могу сделать это на шаге данных, но хотел бы сделать это с помощью Proc SQL или Proc MEANS, поскольку количество категориальных переменных в фактическом наборе данных умеренно велико. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Это легко сделать с помощью proc means. Используя набор данных t1 из ответа Луизы Грей:

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

Создает таблицу результатов, соответствующих результатам SQL.

3 голосов
/ 17 июня 2011

Вот решение с использованием 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;
...