2011-06-17 46 views
1

這是一個新手SAS問題。我有一個包含數值變量v1-v120,V和分類變量Z(帶有三個可能值)的數據集。對於Z的每個可能值,我想得到另一組變量w1-w120,其中w {i} = sum(v {i}}/V,其中sum是給定Z值的和。在這種情況下,我正在尋找3 * 120矩陣,我可以在數據步驟中完成此操作,但希望通過Proc SQL或Proc MEANS來完成,因爲實際數據集中的分類變量的數量適中。 。SAS程序SQL和數組

回答

3

下面是使用PROC SQL的解決方案。你也許還做PROC類似使用的輸出數據集的手段和一個「由」語句。

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; 
+0

謝謝..我認爲我們需要使用宏這 – user227290 2011-06-18 02:39:55

3

很容易與proc means做到這一點。使用t1來自Louisa Gray的回答數據集:

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

這會創建一個匹配SQL結果的結果表。

+0

Proc手段將工作..但如果您需要創建一個新的變量(在proc語句內)使用兩個現有的變量然後proc意味着失敗 – user227290 2011-06-27 05:01:50

+0

不知道什麼你的意思是 - 你在問題的例子中使用了兩個變量嗎?您可以隨時使用數據視圖來生成變量,而無需實際使用I/O資源。 – itzy 2011-06-27 17:12:55