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 に答える