1

最近は主に SAS で作業していますが、RI の知識を失いたくないので、自分が行った基本的なことを再現したいと考えています。私の SAS コードが完璧でない場合は、ご容赦ください。私は自宅に SAS を持っていないので、記憶からこれを行っています。

SASには、おおよそ次の例のようなデータセットがあります(.はSASのNAに相当します)

A  B
1  1
1  3
0  .
0  1
1  0
0  0

上記のデータセットが work.foo の場合、次のようなことができます。

/* create work.bar from dataset work.foo */
data work.bar;
set work.foo;

/* generate a third variable and add it to work.bar */
if a = 0 and b ge 1 then c = 1;
if a = 0 and b = 0  then c = 2;
if a = 1 and b ge 1 then c = 3;
if a = 1 and b = 0  then c = 4;
run;

そして、私は次のようなものを得るでしょう

A  B  C
1  1  3
1  3  3
0  .  .
0  1  1
1  0  4
0  0  2

次に、C で並べ替えを実行し、C を使用してさまざまな操作を実行して、4 つのサブグループを作成できます。たとえば、各グループの平均を取得できます

proc means noprint data =work.bar; 
by c;
var a b;
output out = work.means mean(a b) = a b;
run;

そして、work.means と呼ばれるグループごとに変数のデータを取得します。次のようなものです。

C  A  B
1  0  1
2  0  0
3  2  2
4  1  0

も取れると思います。行、しかし私は私の目的のためにそれを気にしません.

今Rで。適切に読み込まれた同じデータセットがありますが、最後に変数を追加する方法(CCなど)やサブグループで操作を行う方法(procのby ccコマンドなど)がわかりません意味)。また、変数の名前は順不同ではなく、変数が表すものに従っていることに注意してください。

誰かが上記の方法を教えてくれれば、それを私がする必要があることに一般化できると思います。

4

2 に答える 2

4

データセットが、変数aとbを持つwork.fooという2列のデータフレームであると想定します。次に、次のコードはRでそれを行う1つの方法です。

work.bar <- work.foo
work.bar$c <- with( (a==0 & b>=1) + 2*(a==0 & b==0) + 3*(a==1 & b>=1) + 
               4*(a==1 & b==0), data=work.foo)
work.mean <- by(work.bar[,1:2], work.bar$c, mean)
于 2009-10-12T04:08:14.443 に答える