2013-05-27 136 views
1

,我會很感激,如果你能給我一些提示(該怎麼做,或有什麼程序來看看)對以下問題 :SAS:對於一個給定的變量的所有組合創建平均值

例如,如果我有一個包含(對於每個品牌)4個字符變量和3個數值變量的數據集,那麼我想根據字符變量的所有可能組合計算幾個數值變量的平均值(無論是某些字符變量缺失或不)。

Brand Char1 Char2 Char3 Char4 NumVar1 NumVar2 NumVar3 
    A a xx 3 a 0.471 0.304 0.267 
    A b xy 3 s 0.086 0.702 0.872 
    A c xz 3 a 0.751 0.962 0.080 
    A d xx 2 s 0.711 0.229 0.474 
    A a xy 3 a 0.160 0.543 0.256 
    A b xz 1 s 0.200 0.633 0.241 
    A c xx 3 a 0.765 0.511 0.045 
    A d xy 4 s 0.397 0.815 0.950 
    A a xz 1 a 0.890 0.757 0.483 
    A b xx 3 a 0.575 0.625 0.341 
    A c xy 3 a 0.595 0.047 0.584 
    A d xz 1 s 0.473 0.806 0.329 
    A a xx 2 s 0.062 0.161 0.018 
    A b xy 2 s 0.935 0.990 0.072 
    A c xz 4 s 0.564 0.490 0.112 
    A d xx 2 a 0.251 0.228 0.215 
    A a xy 4 a 0.551 0.778 0.605 
    A b xz 1 s 0.887 0.392 0.866 
    A c xx 1 s 0.238 0.569 0.245 
    A d xz 1 a 0.736 0.961 0.627 

因此,我想計算如下(在SAS符號沒有寫,只是邏輯上):

%let numeric_var = NumVar1 NumVar2 NumVar3; *macro of all numerical variables; 

*compute mean values for each NumVar by all combinations of Char.variables; 

compute mean(&numeric_var) by Char1 Char2 Char3 Char4 
compute mean(&numeric_var) by Char1 Char2 Char3 
compute mean(&numeric_var) by Char1 Char2 
compute mean(&numeric_var) by Char1 
compute mean(&numeric_var) by Char1 Char2  Char4 
compute mean(&numeric_var) by Char1    Char4 
compute mean(&numeric_var) by Char1  Char3 Char4 
etc. 

是否有SAS任何更有效的方式來計算所有這些平均數不僅僅是用手鍵入所有這些組合?

原則上,最後我想合併兩個數據集:上面給出的一個數據集;和另一個僅包含字符變量(品牌Char1 Char2 Char3 Char4)的數據集,其中一些數據集缺失。這就是爲什麼我想計算字符變量的所有可能組合的數值變量的平均值。

非常感謝任何想法。

最佳, Vlada

+0

在多個論壇上交叉發表相同的問題沒有任何問題,但是您可能會注意到,如果您在一個地方得到了更好的答案,那麼在其他論壇上找到答案的搜索者可以找到解決方案。 – Joe

回答

3

你會希望做一些閱讀PROC MEANS,我最喜歡的SAS程序之一。例如,考慮一下:

data have; 
    input Brand $ Char1 $ Char2 $ Char3 $ Char4 $ 
     NumVar1 NumVar2 NumVar3; 
    datalines; 
    A a xx 3 a 0.471 0.304 0.267 
    A b xy 3 s 0.086 0.702 0.872 
    A c xz 3 a 0.751 0.962 0.080 
    A d xx 2 s 0.711 0.229 0.474 
    A a xy 3 a 0.160 0.543 0.256 
    A b xz 1 s 0.200 0.633 0.241 
    A c xx 3 a 0.765 0.511 0.045 
    A d xy 4 s 0.397 0.815 0.950 
    A a xz 1 a 0.890 0.757 0.483 
    A b xx 3 a 0.575 0.625 0.341 
    A c xy 3 a 0.595 0.047 0.584 
    A d xz 1 s 0.473 0.806 0.329 
    A a xx 2 s 0.062 0.161 0.018 
    A b xy 2 s 0.935 0.990 0.072 
    A c xz 4 s 0.564 0.490 0.112 
    A d xx 2 a 0.251 0.228 0.215 
    A a xy 4 a 0.551 0.778 0.605 
    A b xz 1 s 0.887 0.392 0.866 
    A c xx 1 s 0.238 0.569 0.245 
    A d xz 1 a 0.736 0.961 0.627 
run; 

proc means noprint data=have completetypes; 
    class Char1 Char2 Char3 Char4; 
    var NumVar1 NumVar2 NumVar3; 
    output out=want mean=mNumVar1 mNumVar2 mNumVar3; 
run; 

書面,程序將創建一個名爲輸出數據集「要」與一個觀察的「類」中列出的變量的每個組合語句,並與平均對於在「var」聲明中列出的每個變量統計量。在這個例子中,將會有300個觀測值(你會注意到比原始數據集大)。

另外,輸出數據集將包含兩個自動變量:

  • _ FREQ _ - 觀察在組合
  • _ TYPE數量_ - 標識符針對特定組合(基於CLASS變量)

_ 類型 _變量將在您的情況下特別有用。它是基於聲明中列出的變量數的數值。因爲你有四個類變量,_ TYPE _將有16個值範圍從0到15。例如,十二個觀察結果佔變量的組合CHAR1CHAR2將具有_ TYPE _ = 12

Here is a link適用於SAS版本9.3中PROC MEANS的在線文檔。

+0

正如Joe在下面提到的,您應該使用'missing'來捕獲缺少變量的任何組合。 –

3

PROC MEANS要做到你需要什麼,假設我理解你的問題。

proc means data=have; 
class char1 char2 char3 char4; 
types char1*char2*char3*char4 
     char1*char2*char3 
     char2*char3*char4 ... etc... ; *or use the various WAYS statements to get all combinations of a particular number of variables, or use _ALL_ to get all combinations; 
var num1 num2 num3; 
output out=want mean=; 
run; 

如果字符變量可能有缺失值,那麼您需要使用/ missing;在CLASS語句上。

(主要來自crossposted SAS-L)

相關問題