SAS:为给定变量集的所有组合创建平均值

时间:2013-05-27 12:31:06

标签: sas

如果你能给我一些提示(如何做或有什么程序可以看一下),我将非常感激。 关于以下问题:

例如,如果我有一个包含(对于每个品牌)4个字符变量和3个数字变量的数据集,那么我想基于所有可能的字符变量组合计算几个数值变量的平均值(无论是否一些characer变量是否缺失)。

 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.

有没有更有效的方法来计算所有这些平均值,而不仅仅是手工输入所有这些组合?

原则上,最后我想合并两个数据集:上面给出的一个数据集;和另一个只有字符变量的数据集(Brand Char1 Char2 Char3 Char4)以及其中一些的缺失值。这就是为什么我想计算所有可能的字符变量组合的数值变量的平均值

非常感谢任何想法。

最佳, Vlada

2 个答案:

答案 0 :(得分:3)

如果我理解你的问题,PROC意味着你应该完成你需要的东西。

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声明中。

(大部分来自SAS-L)

答案 1 :(得分:3)

您需要阅读一些我最喜欢的SAS程序PROC MEANS。例如,考虑一下:

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;

如上所述,该过程将创建一个名为“want”的输出数据集,其中包含“class”语句中列出的每个变量组合的一个观察值,以及列出的每个变量的MEAN统计量在“var”语句中。在此示例中,将有300个观察值(您将注意到它们大于原始数据集)。

此外,输出数据集将包含两个自动变量:

  • _ FREQ _ - 组合中的观察次数
  • _ TYPE _ - 特定组合的标识符(基于 CLASS 变量)

_ TYPE _ 变量在您的情况下特别有用。它是基于语句中列出的变量数量的数值。因为你有四个类变量, _ TYPE _ 将有16个值,范围从0到15.例如,十二个观察结果可以解释变量组合 Char1 Char2 _ TYPE _ = 12

Here is a link到SAS版本9.3的PROC MEANS在线文档。