3

タイトルのように、私はRのcomplete.cases関数に相当するStataを見つけようとしています。

私がこれまでに得た最も近いものは使用することでした

generate sample = e(sample)

回帰を実行し、ケースを削除するかif、このnewlで生成された変数の句を使用した後(ここからソリューションが盗まれました)。

より良い解決策はありますか?

4

2 に答える 2

3

Rでの使用にどれだけ慣れているかはわかりませんがcomplete.cases、Rと同等のStata(rmiss2)の両方のアプリケーションの例を次に示します。

まず、デモンストレーションのためにRでいくつかのデータを作成しましょう。dta後でStataで使用できるファイルとして保存します。

library(foreign)
set.seed(1)
dat <- data.frame(one = rnorm(15),
                  two = sample(LETTERS, 15),
                  three = rnorm(15),
                  four = runif(15))
dat <- data.frame(lapply(dat, function(x) { x[sample(15, 5)] <- NA; x }))
write.dta(dat, file="completeCases.dta")

データは次のようになります。

dat
#           one  two       three      four
# 1          NA    M  0.80418951 0.8921983
# 2   0.1836433    O -0.05710677        NA
# 3  -0.8356286    L  0.50360797 0.3899895
# 4          NA    E          NA        NA
# 5   0.3295078    S          NA 0.9606180
# 6  -0.8204684 <NA> -1.28459935 0.4346595
# 7   0.4874291 <NA>          NA        NA
# 8   0.7383247    C -0.23570656 0.3999944
# 9          NA    N -0.54288826 0.3253522
# 10 -0.3053884 <NA>          NA 0.7570871
# 11         NA    R -0.64947165 0.2026923
# 12  0.3898432 <NA>          NA        NA
# 13         NA    K  1.15191175        NA
# 14 -2.2146999 <NA>  0.99216037 0.2454885
# 15  1.1249309    Q -0.42951311 0.1433044

データを実行すると、各行が完全なケースを表すかどうかを示すsとsのcomplete.casesベクトルが得られます。TRUEFALSE

complete.cases(dat)
#  [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE 
#  [9] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

多くの場合、complete.cases次のように、データをサブセット化するのに役立ちます。

dat[complete.cases(dat), ]
#           one two      three      four
# 3  -0.8356286   L  0.5036080 0.3899895
# 8   0.7383247   C -0.2357066 0.3999944
# 15  1.1249309   Q -0.4295131 0.1433044

または、ここでは、最初の3つの列が完了しているかどうかだけに基づいてサブセット化します。

dat[complete.cases(dat[, 1:3]), ]
#           one two       three      four
# 2   0.1836433   O -0.05710677        NA
# 3  -0.8356286   L  0.50360797 0.3899895
# 8   0.7383247   C -0.23570656 0.3999944
# 15  1.1249309   Q -0.42951311 0.1433044

それでは、Stataに切り替えましょう。

まず、まだインストールrmiss2していない場合はインストールします。

. findit rmiss2

次に、Rで作成したdtaファイルをロードします。

. use "path\to\completeCases.dta", clear

3番目に、を使用rmiss2して「nmis」という名前の新しい列を生成します。この列は、各ケースで欠落している変数の数を示します。

. egen nmis = rmiss2(one two three four)
. list

     +-----------------------------------------------+
     |       one   two       three       four   nmis |
     |-----------------------------------------------|
  1. |         .     M    .8041895   .8921983      1 |
  2. |  .1836433     O   -.0571068          .      1 |
  3. | -.8356286     L     .503608   .3899895      0 |
  4. |         .     E           .          .      3 |
  5. |  .3295078     S           .    .960618      1 |
     |-----------------------------------------------|
  6. | -.8204684     .   -1.284599   .4346595      1 |
  7. |  .4874291     .           .          .      3 |
  8. |  .7383247     C   -.2357066   .3999944      0 |
  9. |         .     N   -.5428883   .3253522      1 |
 10. | -.3053884     .           .   .7570871      2 |
     |-----------------------------------------------|
 11. |         .     R   -.6494716   .2026923      1 |
 12. |  .3898432     .           .          .      3 |
 13. |         .     K    1.151912          .      2 |
 14. |   -2.2147     .    .9921604   .2454885      1 |
 15. |  1.124931     Q   -.4295131   .1433044      0 |
     +-----------------------------------------------+

最後に、keep if...データが欠落しているケースを削除するために使用できます。

. keep if (nmis == 0)
(12 observations deleted)

. list

     +-----------------------------------------------+
     |       one   two       three       four   nmis |
     |-----------------------------------------------|
  1. | -.8356286     L     .503608   .3899895      0 |
  2. |  .7383247     C   -.2357066   .3999944      0 |
  3. |  1.124931     Q   -.4295131   .1433044      0 |
     +-----------------------------------------------+

と同様にcomplete.cases、完全性をチェックする列を指定することもできます。

. use "path\to\completeCases.dta", clear
(Written by R.              )

. egen nmis = rmiss2(one two three)

. keep if (nmis == 0)
(11 observations deleted)

. list

     +-----------------------------------------------+
     |       one   two       three       four   nmis |
     |-----------------------------------------------|
  1. |  .1836433     O   -.0571068          .      0 |
  2. | -.8356286     L     .503608   .3899895      0 |
  3. |  .7383247     C   -.2357066   .3999944      0 |
  4. |  1.124931     Q   -.4295131   .1433044      0 |
     +-----------------------------------------------+

アップデート

これは「破壊的」であることに注意してkeep if...ください。datファイルをリロードせずに元のデータセットに戻ることはできません。ifそのため、次のように使用する方が安全です。

. summarize one two three four if  nmis == 0

    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
         one |         3    .3425423    1.038475  -.8356286   1.124931
         two |         3    6.666667    5.507571          1         12
       three |         3   -.0538706    .4924195  -.4295131    .503608
        four |         3    .3110961     .145398   .1433044   .3999944
于 2012-10-31T18:59:27.693 に答える
1

私はあなたがそれを正しく持っていると思います。私は通常、これが2つの方法のいずれかで実装されているのを目にします。

regress y x1 x2
marksample touse
summarize y x1 x2 if `touse'

または、tempvartouseを完全にバイパスします。

regress y x1 x2
summarize y x1 x2 if e(sample)
于 2012-10-31T17:06:32.627 に答える