2013-05-27 95 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)

相关问题