1

約 40 個の変数を含むデータ セットがあります。これらの約半分は測定値であり、残りの半分はその観測に関する人口統計情報です。各 ID には、入口と出口の 2 つの観測値があります。入り口と出口での測定値の平均を比較しています。

測定ごとに ttest を実行し、txt ファイルに保存するコードを作成しましたが、これはうまく機能します。

次に、人口統計変数によるグループ化を行う必要があります。

私は以下を使用しています

by var1, sort: ttest var2 by stage 

ステージは、観察が入り口か出口かを定義する変数です。var1 は、人口統計変数 (性別、喫煙、飲酒など) の 1 つで、2 ~ 4 個のコード化された値を持つことができます。

私がやろうとしているのは、このコードをループで実行し、テキスト ファイルに書き込むことです。ただし、r() コマンドは、ttest が実行された最後のグループの結果のみを返します。

すべての ttest 結果が結果画面に出力されるため、コード自体は機能しますが、すべての結果がファイルに書き込まれるわけではありません。

たとえば、var1 の値が 1 、2 、3 および 4 の場合、グループ 4 の結果のみが得られます。

foreach var of var  ttlchol-exvol{
foreach v of var sex dm chf diastolic copd ckd Depression {
        capture by `v',sort: ttest `var' , by(stage)
        if !_rc {
        by `v',sort: ttest `var', by(stage)
        file write myfile2 ///
            %9s "`var'" _tab %7.3f (r(N_1)) ///
            _tab %7.3f (r(N_2))      _tab %7.5f (r(p_l)) /// 
            _tab %7.5f (r(p_u))      _tab %7.5f (r(p)) /// 
            _tab %7.5f (r(se))      _tab %7.3f (r(t)) /// 
            _tab %7.3f (r(sd_1))      _tab %7.3f (r(sd_2)) /// 
            _tab %7.3f (r(mu_1))      _tab %7.3f (r(mu_2)) /// 
            _tab %7.3 (r(df_t)) ///
            _n
                }
                                                            }
                            }

STATA が by 、 sort: を処理する方法の詳細を探しましたが、各反復の結果をキャプチャする方法を見つけることができませんでした。

by 、 sort: 関数の反復ごとに結果を取得することは可能ですか? もしそうなら、どうすればいいですか?

4

1 に答える 1

2

これが機能するかどうかはわかりませんが、一度に最大4つのttestを実行するbysortを実行するのではなく、各ttestを個別に実行し、各ttestの後にファイルを書き込むと役立つと思います。これを行うための私のアイデアは次のとおりです。

foreach var of var  ttlchol-exvol{
    foreach v of var sex dm chf diastolic copd ckd Depression {
        levelsof `v', local(coded_vals)
        foreach single_val of local coded_vals {
            capture ttest `var' if `v' == `single_val' , by(stage)
            if !_rc {
                ttest `var' if `v' == `single_val' , by(stage)
                file write myfile2 ///
                    %9s "`var', `v' = `single_val'" _tab %7.3f (r(N_1)) ///
                    _tab %7.3f (r(N_2))      _tab %7.5f (r(p_l)) /// 
                    _tab %7.5f (r(p_u))      _tab %7.5f (r(p)) /// 
                    _tab %7.5f (r(se))      _tab %7.3f (r(t)) /// 
                    _tab %7.3f (r(sd_1))      _tab %7.3f (r(sd_2)) /// 
                    _tab %7.3f (r(mu_1))      _tab %7.3f (r(mu_2)) /// 
                    _tab %7.3 (r(df_t)) ///
                    _n
             }
        }
    }
}

ここ:

levelsof `v', local(coded_vals)

coded_vals発生するすべての値を持つローカルを作成vします。次に、これらの値を繰り返し処理し、それぞれに対して1つのttestを実行して、ファイルに記録します。私はテキストフォーマットの専門家ではありませんが、これのコード化された値を記録する行をファイルライターに追加しましたv。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-01-28T07:51:56.597 に答える