2016-11-09 9 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; 

これは、2つのフィールドを2つの用語に問題はありませんが、あなたは20の用語と200個のフィールドを持っている場合、このコードは有効ではないです。

私は1から20のようなことを試みて失敗しました。これを行い、すべてのテーブルを作成します。

これを行う方法はありますか?

答えて

0

私はあなたがproc手段を探していると思います。出力テーブルとクラス変数の名前をsas-macroに置き換えて、グループ化変数(lastterm1、lastterm2)のリストをループすることができます。必要なものはすべて必要です。

これは、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

関連する問題