3

ここで本当に基本的なものが欠けているように感じます...
Stata の FranceSQ.dta と FranceHQ.dta の 2 つのデータセットをマージしようとしています。どちらも、観測を一意に識別する「uid」という名前の変数を作成しました。

use FranceSQ, clear
merge 1:1 uid using FranceHQ, gen(_merge) keep(match)

今私を混乱させているのは、uidが私の観察を一意に識別していないことを教えてくれることです。私が気付いたのは、FranceSQ を開くとすべてが正常であり、uid 変数を見ると、次の値になっていることです...

25010201
25010202
25010203
...

しかし、マージを実行しようとすると、すべての値が変更されるため、...

2.50101e+10
2.50101e+10
2.50101e+10
...

どんな助けでも大歓迎です...簡単な答えがあると確信していますが、現時点では私を避けています。

***編集** *
ニックのアドバイスが役に立ちました、ありがとう! これは私がやっていたことがうまくいかなかったので、なぜうまくいかなかったのか誰かが指摘できるのだろうか。

1) uid 変数を文字列としてキャストする 2 つの数値変数を連結して、各データセットに uid 変数を作成しました。
2) データセット全体で destring を実行しました (誤ってキャストされた変数が多数あったため)。これにより、uid が double に変わりました。
3) 次に、uid を文字列として再キャストします。これで、最初のマージを行うことができませんでした。すべての観測値を変更している値が、データセットの最後の値であることに気付きました。
4) 微調整していたという理由だけで、uid 変数を double として再キャストし、同じ結果を得ていました。

最初から uid 変数を文字列として再キャストするのではなく、最初からやり直すことでようやく機能するようになりましたが、以前の努力がなぜ機能しなかったのか、またはマージコマンドが実際にどのように決定されたのかについてはまだ途方に暮れています自分の価値観を変える。

4

2 に答える 2

2
  1. 変数が実際に観測値を識別しているかどうかを確認するには、次のように入力しisid uidます。uidいずれにせよ、実行時に が一意の識別子でない場合、Stata は文句を言うでしょうがmerge、それはそれ自体で有用なチェックです。両方のファイルでチェックに合格した場合uid、マージされたファイルでも合格する必要があります。マージされたファイルで失敗するには、少なくとも 1 つのソース ファイルで失敗している必要があります。
  2. data typesに関する Nick Cox の回答に加えて、問題は単に書式設定にある可能性があります。describe uid入力して、現在の形式が何であるかを調べます。科学的表記法を取り除くためかもしれませんformat uid %12.0f
  3. Stata は、必要に応じて変数をより正確な形式に昇格させると思いreplaceます。あるデータセットに値があり、他のデータセットから同じ変数の値をマージすると、同じmergeことが起こるはずです。bytefloat
  4. uidStata がこの変数がうまく機能しないと判断した理由は、 の値が欠落している可能性があります。これらも前後に確認してくださいmergehelp data types各タイプの有効範囲については上記を参照してください)。
于 2013-01-06T17:16:48.853 に答える
2

おそらく、これは精度の問題です。long長整数はまたはdoubleデータ型に保持する必要があります。recastの前に 1 つの識別子が必要になる場合がありますmerge

両方のデータセットで同じデータ型を持っているdescribeかどうかの結果を見て確認する必要があります。uid

于 2013-01-06T09:53:49.630 に答える