1

我有看起来像这样的面板数据集

ID    Usage     month    
1234    2        -2  
1234    4        -1
1234    3         1
1234    2         2
2345    5        -2
2345    6        -1
2345    3         1
2345    6         2

显然还有更多的 ID 变量和使用数据,但这是一般形式。我想在月份列为负数以及每个 ID 为正数时平均使用数据。换句话说,对于每个唯一 ID,平均负月份和正月份的使用情况。我的目标是得到这样的东西。

ID   avg_usage_neg   avg_usage_pos
1234     3                  2.5
2345     5.5                4.5
4

1 回答 1

1

这里有几个选项供您选择。

首先创建测试数据:

data sample;
  input ID    
        Usage     
        month;
datalines;
1234    2        -2  
1234    4        -1
1234    3         1
1234    2         2
2345    5        -2
2345    6        -1
2345    3         1
2345    6         2
;
run;

这是一个 SQL 解决方案:

proc sql noprint;
  create table result as
  select id,
         avg(ifn(month < 0, usage, .)) as avg_usage_neg,
         avg(ifn(month > 0, usage, .)) as avg_usage_pos
  from sample
  group by 1
  ;
quit;

这是一个datastep / proc意味着解决方案:

data sample2;
  set sample;
  usage_neg = ifn(month < 0, usage, .);
  usage_pos = ifn(month > 0, usage, .);
run;

proc means data=sample2 noprint missing nway;
  class id;
  var usage_neg usage_pos;
  output out=result2 mean=;
run;
于 2012-07-13T17:26:28.393 回答