2

このコマンドを使用してlevelsof、変数の一意の値を識別し、それらをマクロに貼り付けています。その後、マクロでこれらの値を使用して、ロードする別のデータセットからレコードを選択したいと思います。

私が念頭に置いているのは、次のようなものです。

keep if inlist(variable, "`macrovariable'")

それは動作しますか?そして、別のより効率的なオプションはありますか?これはRで簡単に行うことができます(ベクトルはマクロよりも操作しやすいため)が、このプロジェクトにはStataが必要です。


明確化:

a3つの一意の値、、、bおよびを持つ変数がある場合、cそれらをマクロ変数に格納して、後で別のデータセットを取得し、それらの値の1つに一致する観測値を選択できるようにします。

通常、inlistこの関数を使用して手動でこれを行うことができますが、さまざまな値のセットでプログラムを実行できるように、ソフトコーディングしたいと思います。そして、inlist関数をマクロで動作させることができません。

4

3 に答える 3

3
* the source data
levelsof x, local( allx )
* make it -inlist-friendly
local allxcommas : subinstr local allx  " " ", ", all
* bring in the new data
use using blah.dta if inlist(x, `allxcommas')
于 2012-10-21T00:33:56.440 に答える
-1

これは私にはうまくいくようです。

* "using" data
clear
tempfile so
set obs 10
foreach v in list a b c d {
    generate `v' = runiform()
}
save `so'

* "master" data
clear
set obs 10
foreach v in list e f g h {
    generate `v' = runiform()
}

* merge
local tokeepusing a b
merge 1:1 _n using `so', keepusing(`tokeepusing')

収量:

. list

     +------------------------------------------------------------------------------------------+
     |     list          e          f          g          h          a          b        _merge |
     |------------------------------------------------------------------------------------------|
  1. | .7767971   .5910658   .6107377   .7256517    .357592   .8953723   .0871481   matched (3) |
  2. |  .643114   .6305301   .6441092   .7770287   .5247816   .4854506   .3840067   matched (3) |
  3. | .3833295    .175099   .4530386   .5267127    .628081   .2273252   .0460549   matched (3) |
  4. | .0057233   .1090542   .1437526   .3133509    .604553   .9375801   .8091199   matched (3) |
  5. | .8772233   .6420991   .5403687   .1591801   .5742173   .8948932   .4121684   matched (3) |
     |------------------------------------------------------------------------------------------|
  6. | .6526399   .5137199    .933116   .5415702   .4313532   .8602547   .5049801   matched (3) |
  7. | .2033027   .8745837      .8609   .0087578   .9844069   .1909852   .3695011   matched (3) |
  8. | .6363281   .0064866   .6632325    .307236   .9544498   .6267227   .2908498   matched (3) |
  9. |  .366027   .4896181   .0955155   .4972361   .9161932   .7391482    .414847   matched (3) |
 10. | .8637221   .8478178   .5457179   .8971257   .9640535    .541567   .1966634   matched (3) |
     +------------------------------------------------------------------------------------------+

これはあなたの質問に答えていますか?そうでない場合は、コメントしてください。

于 2012-10-20T17:10:54.617 に答える