2016-11-09 3 views
0

Когда у вас есть таблица типа;Создать таблицу с петлей в SAS

somefield1 somefield2 lastterm1 lastterm2
(10) (20) (1) (-)
(20) (40) (1) (2)
(30) (50) (-) (2)

и попытайтесь сгруппировать для каждого термина, есть ли более простой способ сделать это, а не;

PROC SQL; 
    CREATE TABLE WORK.LAST_TERM1 AS 
    SELECT T1.LASTTERM1, 
    (MEAN(t1.'somefield1'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield1'n, 
    (MEAN(t1.'somefield2'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield2'n 

    FROM WORK.MAIN_TABLE t1 
GROUP BY t1.LASTTERM1; 
RUN; 
PROC SQL; 
    CREATE TABLE WORK.LAST_TERM2 AS 
    SELECT T1.LASTTERM2, 
    (MEAN(t1.'somefield1'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield1'n, 
    (MEAN(t1.'somefield2'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield2'n 

    FROM WORK.MAIN_TABLE t1 
GROUP BY t1.LASTTERM2; 
RUN; 

Это не проблема с двумя полями и двумя терминами, но если у вас есть 20 терминов и 200 полей этот код не является эффективным.

Я попытался и не смог сделать что-то вроде 1-20, сделав это и создав все таблицы.

Есть ли способ сделать это?

ответ

0

Я думаю, что вы ищете proc средства. Вы можете прокручивать список переменных группировки (т. Е. Lastterm1, lastterm2) с помощью sas-macro, заменяя имя выходной таблицы и переменной класса и должно иметь все, что вам нужно.

Это простой макрос, который сделает это для last_term1 - last_term20. Его немного непонятно, что вы хотите, так это основная обобщенная форма.

%macro looper(); 
%do i = 1 %to 20; 
    proc means data=WORK.MAIN_TABLE; 
    var somefield1 somefield2; 
    class lastterm&i.; 
    output out=WORK.LAST_TERM&i. 
     mean(somefield1) = MEAN_of_somefield1 
     mean(somefield2) = MEAN_of_somefield2; 
    run; 
%end; 
%mend; 
%looper(); 
+0

На самом деле я спрашиваю, как сделать sas-macro, который может заменить имя выходной таблицы и переменную класса. вот где я потерпел неудачу. Это должно быть сделано, потому что они растут по порядку, например «lastterm (n)», «lastterm (n + 1)» ... – kutayatesoglu

+0

Этот макрос полностью то, что я искал. Спасибо за помощь :) – kutayatesoglu

 Смежные вопросы

  • Нет связанных вопросов^_^