2

次の名前の変数のデータセットがあるとします ( と のスタブに注意してくださいx) hm

x9, xdog, x_99, hma8j, hm40, hm0

変数名のリスト (ワイルドカードを含む場合があります) を提供するプログラムによる方法を開発し、各変数名をrecode0 未満のすべての値と欠損値 ( .) にループします。

実際には、私は多くの列を持っておりrecode、そのうちのいくつかだけを必要としています。データが大きいため、列のインデックスや範囲がわからないため、それらを使用したくありません。

私のアプローチには、次の手順が含まれます。

  1. myvarsワイルドカードを含む変数名を含むという名前のローカル マクロを作成します。

    local myvars x* hm*
    
  2. 変数リスト内の文字列を展開して、完全な変数名文字列を含めます (これにより、元の変数名が生成されます)。

    syntax 'myvars'
    
  3. 変数名のリストをループして、値を欠落に設定します。

    foreach x of local 'myvars' { 
        replace 'x' = . if 'x' < 0
    }
    

forただし、ワイルドカードをループに含める方法がわかりません。上記のコードは機能せず、invalid syntaxエラーが発生します。

私は、Statalist の次のスレッドが役立つことを発見しましたが、それらは解決策を提供しておらず、スタブの使用は効率的ではないようです。

誰でも私を助けることができますか?

4

2 に答える 2

4
foreach x of varlist x* h* {
   replace `x'= . if `x' < 0
}

ここから:

http://www.cpc.unc.edu/research/tools/data_analysis/statatutorial/labor_ Saving/loops

于 2016-11-11T08:53:59.440 に答える