1

同じ列の前の行に値が表示されているかどうかを確認したいと思います。最後に、個別の観測数の累積カウントを取得したいと思います。

すべての _n 行を連結して正規表現を使用する以外の解決策はありますか? 行を連結してそこに到達していますが、文字列変数の 244 文字の制限 (Stata <13) を考えると、これは適用できない場合があります。

これが私が今していることです:

gen tmp=x
replace tmp = tmp[_n-1]+ "," + tmp if _n > 1
gen cumu=0
replace cumu=1 if regexm(tmp[_n-1],x+"|"+x+",|"+","+x+",")==0
replace cumu= sum(cumu)

        +-----+
        |  x  | 
        |-----|
     1. |  12 |
     2. |  32 |
     3. |  12 |
     4. |  43 |
     5. |  43 |
     6. |  3  |
     7. |  4  |
     8. |  3  |
     9. |  3  |
    10. |  3  |
        +-----+

になる

        +-------------------------------+
        |  x  | tmp                     |
        |-----|--------------------------
     1. |  12 |  12                     |
     2. |  32 |  12,32                  |
     3. |  12 |  12,32,12               |
     4. |  43 |  3,32,12,43             |
     5. |  43 |  3,32,12,43,43          |
     6. |  3  |  3,32,12,43,43,3        |
     7. |  4  |  3,32,12,43,43,3,4      |
     8. |  3  |  3,32,12,43,43,3,4,3    |
     9. |  3  |  3,32,12,43,43,3,4,3,3  |
    10. |  3  |  3,32,12,43,43,3,4,3,3,3|
        +--------------------------------+ 

そして最後に

        +-----------+
        |  x  | cumu|
        |-----|------
     1. |  12 |  1  |
     2. |  32 |  2  |
     3. |  12 |  2  |
     4. |  43 |  3  |
     5. |  43 |  3  |
     6. |  3  |  4  |
     7. |  4  |  5  |
     8. |  3  |  5  |
     9. |  3  |  5  |
    10. |  3  |  5  |
        +-----------+ 

「中間ステップ」を回避する方法についてのアイデア (私にとってはx、数字の代わりに文字列を使用する場合に非常に重要になります)。

ありがとう!

4

1 に答える 1

1

正規表現は優れていますが、ここでも他の場所と同じように単純な計算で十分です。サンプルデータを使用して

. 入力×

             バツ
  1.12
  2. 32
  3.12
  4.43
  5.43
  6.3  
  7.4  
  8.3  
  9.3  
 10.3  
 11.終わり


do ファイルの終わり

それぞれの個別の値の最初の出現を特定できます。

. gen long order = _n

. bysort x (順序) : gen first = _n == 1

. ソート順

. l

     +--------------------+
     | | x 最初に注文 |
     |--------------------|
  1. | 12 1 1 |
  2. | 32 2 1 |
  3. | 12 3 0 |
  4. | 43 4 1 |
  5. | 43 5 0 |
     |--------------------|
  6. | 3 6 1 |
  7. | 4 7 1 |
  8. | 3 8 0 |
  9. | 3 9 0 |
 10. | 3 10 0 |
     +--------------------+

これまでに見られた個別の値の数は、first使用の累積合計ですsum()。これは文字列変数でも機能します。実際、この問題は、

http://www.stata-journal.com/sjpdf.html?articlenum=dm0042

.pdf として誰でもアクセスできます。search distinctこの記事を参照していたはずです。

by:sort、 で_nできることを流暢に話せるようになることは_N、Stata の重要なスキルです。こちらもご覧ください

http://www.stata-journal.com/sjpdf.html?articlenum=pr0004

すべての人がアクセスできる別の記事のために。

于 2013-11-11T16:11:05.693 に答える